重新排序得到 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; } };