题目连接:https://leetcode-cn.com/problems/reordered-power-of-2/

题目分析

如果直接顺着题目的思路,得到数字n的全排列,然后再去判断其是不是2的幂是比较复杂的。
我们应该注意到,因为数字是可以随意排列的,因此所有可以通过变换排列得到的数字都有相同个数的0、1、2,而n⩽1e9n\leqslant1e9n⩽1e9,2的幂只有30个左右,我们可以先记录2的幂次然后再判断当前数字是不是和这些数字有相同的数字组合。

AC代码

class Int {static constexpr int MAXN = 10;
public:explicit Int(int x = 0);array<int, MAXN> cnt;friend bool operator == (const Int &lhs, const Int &rhs);
};Int::Int(int x):cnt({0}) {while (x) {++cnt[x % 10];x /= 10;}
}bool operator == (const Int &lhs, const Int &rhs) {return lhs.cnt == rhs.cnt;
}void init(vector<Int> &pow) {constexpr int MAXN = 1e9;int x = 1;while (x < MAXN) {pow.emplace_back(x);x <<= 1;}
}class Solution {public:bool reorderedPowerOf2(int n) {vector<Int> pow;init(pow);Int nn(n);for (auto &integer : pow) {if (integer == nn) return true;}return false;}
};

题解分析

刚开始的时候考虑要不要使用二分查找,但是觉得这样的话还得排序,还得预处理,每次运行样例的时候都得处理一遍好像意义不大。

看了一下题解,发现题解在全局进行预处理,使用了匿名函数,第一次在C++里面见到这样使用匿名函数,的确很方便。

int i = []() -> int {cout << "Hello world" << endl;return 0;
}();

并且题解将数字映射成了一个字符串,这样就可以使用unorder_map进行O(1)O(1)O(1)查询,感觉还是很巧妙的。

leetcode869. 重新排序得到 2 的幂相关推荐

  1. 869. 重新排序得到 2 的幂

    869. 重新排序得到 2 的幂 给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零. 如果我们可以通过上述方式得到 2 的幂,返回 true:否则,返回 fals ...

  2. Leecode 869. 重新排序得到 2 的幂——Leecode每日一题系列

    题目链接:https://leetcode-cn.com/problems/reordered-power-of-2/ 题目 给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导 ...

  3. LeetCode 869. 重新排序得到 2 的幂(排序 全排列)

    1. 题目 给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零. 如果我们可以通过上述方式得到 2 的幂,返回 true:否则,返回 false. 示例 1: 输入 ...

  4. Leetcode刷题 2021.02.26

    Leetcode刷题 2021.02.26 Leetcode1178 猜字谜 Leetcode869 重新排序得到 2 的幂 Leetcode1676 二叉树的最近公共祖先 IV Leetcode11 ...

  5. Leecode题解汇总(附题型归类)

    虽然已找到工作,但不断地自我学习和自我磨砺是无止境的. 为方便量化和总结经验,记录一下个人的Leecode刷题记录,之前的刷题并没有收录进去,有时间会统一整理. 序号 题目 题解 类型 来源 难度 0 ...

  6. LeetCode刷题记录(2)

    文章目录 动态规划 01背包 背包问题 [416. 分割等和子集](https://leetcode-cn.com/problems/partition-equal-subset-sum/) [104 ...

  7. leetcode题目整理

    1.面试先说出最简单的方法,然后在继续优化,不要想复杂,先暴力解决 2.理解问题,和面试交流题意 3.注意边界条件 4.不着急 一.二分 33.搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 ...

  8. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  9. LeetCode中的那些题

    目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...

最新文章

  1. js怎么获取一个元素与屏幕右边的距离_js获取元素到屏幕左上角的距离
  2. tls 禁用重协商_SSL/TLS高危不安全重新协商漏洞
  3. buu RSAroll
  4. 读《李商隐诗集》有感
  5. ASP.NET MVC Music Store教程(2):控制器
  6. 严格对角占优矩阵特征值_盖尔金圆定理及严格对角占优矩阵(SDD)
  7. zabbix4.2学习笔记--监控tomcat
  8. IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错
  9. 自己动手系列——实现一个简单的ArrayList
  10. 配置ssd为缓存_SSD小讲堂丨新电脑剪视频还卡?原因给你们找到了!
  11. CSND的Markdown使用练习
  12. 升入高中,如何规划数学竞赛
  13. 友情链接对于网站来说有什么作用?
  14. 微光二维码对接c#met
  15. hdfs 元数据维护机制
  16. 提高网站提高网站广告点击率的几个可行方法
  17. 单页应用移动端弹窗穿透解决终极方案
  18. Linux入门学习(六)—— 怎么更改文件的所有者、所属组?以及怎么更改系统创建的默认权限?
  19. Google Groups
  20. [附源码]计算机毕业设计Python+uniapp智慧校园平台APP06l79(程序+lw+APP+远程部署)

热门文章

  1. MySQL(介绍,安装,密码操作,权限表)
  2. 【BZOJ3589】动态树
  3. ie下的透明度,用滤镜filter:alpha
  4. Eclipse 代码提示无效的解决方法
  5. python中mainloop添加背景_Python实例讲解 - tkinter canvas (设置背景图片及文字)
  6. java 自定义报表_灵活数据分析 | 自定义数据分析_集力数据系统平台_Java报表系统软件...
  7. php mysql无限分类排序_PHP 无限级分类、排序
  8. c语言算ex自定义函数,用C语言写定积分的通用函数:sin(x),cos(x),eX.
  9. Java代码格式化算法_一个时间格式化的工具类:TimeUtil
  10. 服务器 风扇测试软件,图解服务器风扇安装的正确方法