869. 重新排序得到 2 的幂
思路:预处理+哈希表
由于我们可以按任意顺序对数字进行排序,因此对于两个不同的整数a和b,如果十进制表示的字符数组,从小到大排序的结果是相同的,那么若a能够重排得到2的幂,那么b也可以;若a不能重排得到2的幂,那么b也不能。
进一步,只要a和b的十进制表示的字符数组中,从0到9每个字符的出现次数,在a和b中都是一样的,那么a和b能否重排得到2的幂的结果是一样的。
首先对1到 1 0 9 10^9 109的范围内的2的幂记录在哈希表中,之后对数字n处理,判断数字n对应的字符数组是否在哈希表中。
class Solution {
public:
unordered_set<string> mp;
string count(int n){
string res=string(10,0);
while(n>0){
res[n%10]++;
n/=10;
}
return res;
}
bool reorderedPowerOf2(int n) {
for(int i=1;i<=1e9;i<<=1){
mp.insert(count(i));
}
return mp.count(count(n));
}
};
时间复杂度 O(logn)
空间复杂度 O(1)