(LeetCode 每日一题) 869. 重新排序得到 2 的幂 (哈希表+枚举)
题目:869. 重新排序得到 2 的幂
思路:哈希表+枚举。先预处理出所有的2的幂数,用哈希表来存储。
C++版本:
class Solution {
public:// 哈希表存储所有 2的幂数 按升序排列的形式unordered_set<string> st;// 预处理出所有的2的幂数void pre_solve(){long n=1000000000;for(long i=1;i<n;i<<=1){string s=to_string(i);// 按升序排列的形式sort(s.begin(),s.end());st.insert(s);}}bool reorderedPowerOf2(int n) {pre_solve();string s=to_string(n);sort(s.begin(),s.end());return st.find(s)!=st.end();}
};
JAVA版本:
class Solution {Set<String> st=new HashSet<>();void pre_solve(){long n=1000000000;for(long i=1;i<=n;i<<=1){String s=Long.toString(i);char[] c=s.toCharArray();Arrays.sort(c);st.add(new String(c));}}public boolean reorderedPowerOf2(int n) {pre_solve();String s=Integer.toString(n);char[] c=s.toCharArray();Arrays.sort(c);return st.contains(new String(c));}
}
GO版本:
var st =map[string]bool{}func pre_solve(){n := 1000000000for i:=1;i<=n;i<<=1 {s:=strconv.Itoa(i)c:=[]byte(s)slices.Sort(c)st[string(c)]=true}
}func reorderedPowerOf2(n int) bool {pre_solve()s:=strconv.Itoa(n)c:=[]byte(s)slices.Sort(c)return st[string(c)]
}