当前位置: 首页 > 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.lryc.cn/news/615804.html

    相关文章:

  1. Java设计模式之开闭原则介绍与说明
  2. 深入解析Go设计模式:命令模式实战
  3. 分布微服务电商订单系统Rust编码开发[上]
  4. Rust进阶-part6-宏
  5. [激光原理与应用-224]:机械 - 机械设计与加工 - 常见的术语以及含义
  6. 每日算法刷题Day60:8.10:leetcode 队列5道题,用时2h
  7. 机器学习-增加样本、精确率与召回率
  8. Modbus RTU转Profinet网关接在线循环Na离子实现PLC读取温度值
  9. C# 中常用集合以及使用场景
  10. 本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕增加利用 Whisper 分段信息,全新 Prompt功能
  11. Framework开发之Zygote进程2(基于开源的AOSP15)--init.rc在start zygote之后的事情(详细完整版逐行代码走读)
  12. 《解锁 C++ 基础密码:输入输出、缺省参数,函数重载与引用的精髓》
  13. 【Linux | 网络】数据链路层
  14. 九、Linux Shell脚本:运算符与表达式
  15. 开启单片机
  16. 服务器硬件电路设计之 I2C 问答(三):I2C 总线上可以接多少个设备?如何保证数据的准确性?
  17. 笔试——Day34
  18. 亚麻云之全球加速器——CloudFront(CDN)服务入门
  19. 【Docker实战】Spring Boot应用容器化
  20. ShadowKV 机制深度解析:高吞吐长上下文 LLM 推理的 KV 缓存“影子”方案
  21. Python爬虫-爬取政务网站的文档正文内容和附件数据
  22. 【后端】Java 8 特性 `User::getId` 语法(方法引用)介绍
  23. 【东枫科技】NTN-IOT 卫星互联网原型系统,高达1.6G大带宽
  24. MPLS特性之PHP(Penultimate Hop Popping)
  25. Android快速视频解码抽帧FFmpegMediaMetadataRetriever,Kotlin(2)
  26. 【软考中级网络工程师】知识点之 DCC 深度剖析
  27. 【21】OpenCV C++实战篇——OpenCV C++案例实战二十七《角度测量》
  28. Perplexity 为特朗普 Truth Social 提供技术支持
  29. 如何培养自己工程化的能力(python项目)
  30. Pytorch深度学习框架实战教程12:Pytorch混合精度推理,性能加速147%的技术实现