当前位置: 首页 > news >正文

LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)

【LetMeFly】869.重新排序得到 2 的幂:哈希表+排序(一次初始化)

力扣题目链接:https://leetcode.cn/problems/reordered-power-of-2/

给定正整数 n ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。

如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false

 

    示例 1:

    输入:n = 1
    输出:true
    

    示例 2:

    输入:n = 10
    输出:false
    

     

    提示:

    • 1 <= n <= 109

    解题方法:排序+哈希表

    10910^9109范围内,一共有202^0202292^{29}229这30个2的幂。

    我们可以提前把每个2的幂对应的字符串按自身字符从小到大的顺序拍个序并加入哈希表中,这样对于一个数字nnn,我们只需要将其转为字符串并自排序后看是否在哈希表中就行了。

    时空复杂度分析

    不计初始化时空复杂度的话,对于一次查询nnn

    • 时间复杂度O(llog⁡l)O(l\log l)O(llogl),其中l=log⁡10nl=\log_{10}nl=log10n
    • 空间复杂度O(l)O(l)O(l)

    初始化不论多少测试用例(目前137个)一共会执行一次:

    • 时间复杂度O(Cllog⁡l)O(Cl\log l)O(Cllogl),其中C=30C=30C=30lll是一个2的幂十进制下的长度
    • 空间复杂度O(Cl)O(Cl)O(Cl)

    AC代码

    以下代码中哈希表加入了2302^{30}230,其实有点多余

    C++
    /** @Author: LetMeFly* @Date: 2025-08-10 17:20:07* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-08-10 17:27:46*/
    #if defined(_WIN32) || defined(__APPLE__)
    #include "_[1,2]toVector.h"
    #endifclass Solution {
    private:// unordered_set<unordered_map<int, int>> times;  // 无默认哈希函数static unordered_set<string> can;void initCan() {if (!can.empty()) {return;}for (int i = 0; i <= 30; i++) {  // 其实到i<30即可string s = to_string(1 << i);sort(s.begin(), s.end());can.insert(s);}}
    public:bool reorderedPowerOf2(int n) {initCan();string s = to_string(n);sort(s.begin(), s.end());return can.count(s);}
    };unordered_set<string> Solution::can;
    
    Python
    '''
    Author: LetMeFly
    Date: 2025-08-10 17:20:07
    LastEditors: LetMeFly.xyz
    LastEditTime: 2025-08-10 20:12:28
    '''
    can = set(''.join(sorted(str(1 << i))) for i in range(31))class Solution:def reorderedPowerOf2(self, n: int) -> bool:return ''.join(sorted(str(n))) in can
    
    Java
    /** @Author: LetMeFly* @Date: 2025-08-10 17:20:07* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-08-10 20:51:10*/
    import java.util.Set;
    import java.util.HashSet;
    import java.util.Arrays;class Solution {private static final Set<String> can = new HashSet<>();static {for (int i = 0; i < 31; i++) {can.add(itoa(1 << i));}}private static String itoa(int n) {char[] s = String.valueOf(n).toCharArray();Arrays.sort(s);return new String(s);}public boolean reorderedPowerOf2(int n) {return can.contains(itoa(n));}
    }
    
    Go
    /** @Author: LetMeFly* @Date: 2025-08-10 17:20:07* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-08-10 20:46:54*/
    package mainimport ("slices""strconv"
    )var can0869 = map[string]bool{}func init0869() {if len(can0869) > 0 {return}for i := 0; i < 31; i++ {can0869[itoa869(1 << i)] = true}
    }func itoa869(i int) string {s := []byte(strconv.Itoa(i))slices.Sort(s)return string(s)
    }func reorderedPowerOf2(n int) bool {init0869()return can0869[itoa869(n)]
    }
    
    Rust
    /** @Author: LetMeFly* @Date: 2025-08-10 17:20:07* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-08-10 21:17:39*/
    use std::collections::HashSet;lazy_static::lazy_static! {static ref CAN: HashSet<String> = {let mut can = HashSet::new();for i in 0..31 {can.insert(Solution::itoa(1 << i));}can};
    }impl Solution {fn itoa(i: i32) -> String {let mut v: Vec<char> = i.to_string().chars().collect();v.sort();v.into_iter().collect()}pub fn reordered_power_of2(n: i32) -> bool {CAN.contains(&Self::itoa(n))}
    }
    

    End

    不知道是不是一种错觉,感觉域名注册商在cloudflare的话CDN会快很多。

    似乎真多是很多。和域名注册商在阿里云相比。

    同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

    千篇源码题解已开源

    http://www.dtcms.com/a/324280.html

    相关文章:

  1. Android 16 KB页面大小适配的权威技术方案总结
  2. Android快速视频解码抽帧FFmpegMediaMetadataRetriever,Kotlin(2)
  3. Android 开发问题:Invalid id; ID definitions must be of the form @+id/ name
  4. 010601抓包工具及证书安装-基础入门-网络安全
  5. 浅谈 A2A SDK 核心组件
  6. 电脑本地摄像头做成rtsp流调用测试windows系统中
  7. 【Docker实战】将Django应用容器化的完整指南
  8. Pytorch深度学习框架实战教程-番外篇10-PyTorch中的nn.Linear详解
  9. Linux-静态配置ip地址
  10. 怎么将视频转换成字幕python作为工具
  11. 计算机视觉(CV)——pytorch张量基本使用
  12. 深入解析Java中的String、StringBuilder与StringBuffer:特性、区别与最佳实践
  13. Gin 框架中的模板引擎使用指南
  14. LeetCode 每日一题 2025/8/4-2025/8/10
  15. mpv core_thread pipeline
  16. c语言常见错误
  17. MySQL 处理重复数据详细说明
  18. ADK(Agent Development Kit)【2】调用流程详解
  19. 智慧交通-道路积雪识别分割数据集labelme格式1985张2类别
  20. python Flask简单图书管理 API
  21. 【Linux知识】Linux grep 命令全面使用指南
  22. 祝融号无线电工作频段
  23. C++入门自学Day8-- 初识Vector
  24. leetcode2379:得到K个黑块的最少涂色次数(定长滑动窗口)
  25. 2.变量和常量
  26. Go 工具链环境变量实战:从“command not found”到工具全局可用的全流程复盘
  27. 【数据结构入门】栈和队列的OJ题
  28. 二维前缀和问题
  29. MySQL面试题及详细答案 155道(041-060)
  30. 构建第三方软件仓库