重新排序得到 2 的幂 -- LeetCode -- 10.29
重新排序得到 2 的幂
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:1 输出:true
示例 2:
输入:10 输出:false
看见重排列就想用DFS....太失败了。。。
方法一:词频统计 + 哈希表
思路:找到每个 2 的 幂 ,然后统计其中 0 ~ 9 的数量,若是跟 n转换成的字符串 中的数量一样,则么意味着可以转换;
class Solution {
public:
bool reorderedPowerOf2(int n) {
map<string, int> map;
string s = to_string(n);
for(int i = 1; i <= 1e9; i *= 2){
string s1 = to_string(i);
string s2 = "0000000000";
for(int j = 0; j < s1.size(); j++){
s2[s1[j] - '0']++;
}
map[s2] = 1;
}
string s2 = "0000000000";
for(int i = 0; i < s.size(); i++){
s2[s[i] - '0']++;
}
if(map[s2] == 1)return true;
else return false;
}
};
方法一:排序 + 哈希表
思路:找到每个 2 的 幂 ,将其排序然后放入 map,然后把 n 转换成字符串后排序 如果在map中,则么意味着可以转换;
class Solution {
public:
bool reorderedPowerOf2(int n) {
map<string, int> map;
string s = to_string(n);
for(int i = 1; i <= 1e9; i *= 2){
string ss = to_string(i);
sort(ss.begin(), ss.end());
map[ss] = 1;
}
sort(s.begin(), s.end());
if(map[s] == 1) return true;
else return false;
}
};

浙公网安备 33010602011771号