重新排序得到 2 的冪 -- LeetCode -- 10.29
阿新 • • 發佈:2021-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; } };