Problem: 869. 重新排序得到 2 的幂
思路
2^29 < 10^9,在1 < n < 109范围内,2的幂最大到229。
解题过程
- 写一个函数
countNums,用unordered_map<int,int>统计每个数字出现的次数。 - 对 n 调用一次,得到数字频次表。
- 枚举所有 2^i(i 从 0 到 30),统计它们的数字频次表。
- 比较两个哈希表是否相等。
复杂度
- 时间复杂度: O ( 1 ) O(1) O(1)
- 空间复杂度: O ( 1 ) O(1) O(1)
Code
class Solution {
public:
unordered_map<int, int> countNums(int n) {
unordered_map<int, int> cnt;
if (n == 0) {
cnt[0] = 1;
return cnt;
}
while (n > 0) {
cnt[n % 10]++;
n /= 10;
}
return cnt;
}
bool reorderedPowerOf2(int n) {
auto target = countNums(n);
for (int i = 0; i < 30; i++) {
int power = 1 << i;
if (countNums(power) == target) {
return true;
}
}
return false;
}
};

被折叠的 条评论
为什么被折叠?



