leetcode869. 重新排序得到 2 的幂
题目连接: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 的幂相关推荐
- 869. 重新排序得到 2 的幂
869. 重新排序得到 2 的幂 给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零. 如果我们可以通过上述方式得到 2 的幂,返回 true:否则,返回 fals ...
- Leecode 869. 重新排序得到 2 的幂——Leecode每日一题系列
题目链接:https://leetcode-cn.com/problems/reordered-power-of-2/ 题目 给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导 ...
- LeetCode 869. 重新排序得到 2 的幂(排序 全排列)
1. 题目 给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零. 如果我们可以通过上述方式得到 2 的幂,返回 true:否则,返回 false. 示例 1: 输入 ...
- Leetcode刷题 2021.02.26
Leetcode刷题 2021.02.26 Leetcode1178 猜字谜 Leetcode869 重新排序得到 2 的幂 Leetcode1676 二叉树的最近公共祖先 IV Leetcode11 ...
- Leecode题解汇总(附题型归类)
虽然已找到工作,但不断地自我学习和自我磨砺是无止境的. 为方便量化和总结经验,记录一下个人的Leecode刷题记录,之前的刷题并没有收录进去,有时间会统一整理. 序号 题目 题解 类型 来源 难度 0 ...
- LeetCode刷题记录(2)
文章目录 动态规划 01背包 背包问题 [416. 分割等和子集](https://leetcode-cn.com/problems/partition-equal-subset-sum/) [104 ...
- leetcode题目整理
1.面试先说出最简单的方法,然后在继续优化,不要想复杂,先暴力解决 2.理解问题,和面试交流题意 3.注意边界条件 4.不着急 一.二分 33.搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 ...
- 如何学好C语言--你的学渣朋友告诉你
光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...
- LeetCode中的那些题
目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...
最新文章
- js怎么获取一个元素与屏幕右边的距离_js获取元素到屏幕左上角的距离
- tls 禁用重协商_SSL/TLS高危不安全重新协商漏洞
- buu RSAroll
- 读《李商隐诗集》有感
- ASP.NET MVC Music Store教程(2):控制器
- 严格对角占优矩阵特征值_盖尔金圆定理及严格对角占优矩阵(SDD)
- zabbix4.2学习笔记--监控tomcat
- IE浏览器中访问jsp页面,页面不执行ajax请求,后台控制台报错
- 自己动手系列——实现一个简单的ArrayList
- 配置ssd为缓存_SSD小讲堂丨新电脑剪视频还卡?原因给你们找到了!
- CSND的Markdown使用练习
- 升入高中,如何规划数学竞赛
- 友情链接对于网站来说有什么作用?
- 微光二维码对接c#met
- hdfs 元数据维护机制
- 提高网站提高网站广告点击率的几个可行方法
- 单页应用移动端弹窗穿透解决终极方案
- Linux入门学习(六)—— 怎么更改文件的所有者、所属组?以及怎么更改系统创建的默认权限?
- Google Groups
- [附源码]计算机毕业设计Python+uniapp智慧校园平台APP06l79(程序+lw+APP+远程部署)
热门文章
- MySQL(介绍,安装,密码操作,权限表)
- 【BZOJ3589】动态树
- ie下的透明度,用滤镜filter:alpha
- Eclipse 代码提示无效的解决方法
- python中mainloop添加背景_Python实例讲解 - tkinter canvas (设置背景图片及文字)
- java 自定义报表_灵活数据分析 | 自定义数据分析_集力数据系统平台_Java报表系统软件...
- php mysql无限分类排序_PHP 无限级分类、排序
- c语言算ex自定义函数,用C语言写定积分的通用函数:sin(x),cos(x),eX.
- Java代码格式化算法_一个时间格式化的工具类:TimeUtil
- 服务器 风扇测试软件,图解服务器风扇安装的正确方法