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

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.xdnf.cn/news/17442.html

    相关文章:

  1. 前端开发的奇技淫巧 --- 持续更新中
  2. 使用线性降维方法进行数据降维
  3. 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  4. MariaDB 数据库管理与web服务器
  5. 变量详解:创建初始化与内存管理
  6. 【数据结构入门】栈和队列的OJ题
  7. Virtio 驱动关键结构体与函数详解
  8. RabbitMQ面试精讲 Day 18:内存与磁盘优化配置
  9. 01.【面试题】在SpringBoot中如何实现多数据源配置
  10. UNet改进(31):基于Adaptive Attention的UNet设计与实践
  11. 智慧社区(十一)——Spring Boot 实现 Excel 导出、上传与数据导入全流程详解
  12. 【永磁同步电机数学模型全程推导】【7 转矩方程】
  13. IntelliJ IDEA 2025.2 重磅发布
  14. 移动端音频处理实践:59MB变声应用的技术实现分析
  15. 【GPT入门】第43课 使用LlamaFactory微调Llama3
  16. GitLab 零基础入门指南:从安装到项目管理全流程
  17. 复杂项目即时通讯从android 5升级android x后遗症之解决 ANR: Input dispatching timed out 问题 -优雅草卓伊凡
  18. Android Intent 解析
  19. 绕过文件上传漏洞并利用文件包含漏洞获取系统信息的技术分析
  20. GPT OSS深度解析:OpenAI时隔6年的开源模型,AI民主化的新里程碑?
  21. ubuntu 安装内核模块驱动 DKMS 介绍
  22. RL代码实践 02——策略迭代
  23. IDEA 如何导入系统设置
  24. Go语言中切片(Slice)的拷贝
  25. IDEA 快捷编辑指南
  26. Mybatis学习之动态SQL(八)
  27. 大型动作模型LAM:让企业重复任务实现80%效率提升的AI技术架构与实现方案
  28. android 使用openimagelib OpenImage 实现点击放大图片,浏览
  29. 计算机网络---IP(互联网协议)
  30. MySQL(190)如何优化MySQL的网络传输?