题目
题解思路
直接预处理出所有范围中2的幂次的结果。然后再将这个数全排列枚举出答案。
全排列可以用next_permutation()函数。
但是他只排列出字典序比这个数大的数,所以先将数字从小到大排序出最小字典序,再用这个函数就可以全排列出所有情况了。
而且这个函数还可以加入cmp来改变比较类型。
AC代码
class Solution {
public:
bool reorderedPowerOf2(int n) {
bool flag = 0 ;
vector <int> a ;
int p = 0 ;
while ( n )
{
a.push_back(n%10) ;
n/=10 ;
p++;
}
unordered_map <int , int > mp ;
int jc = 1 ;
mp[jc] = 1 ;
for ( int i = 1 ; i < 31 ; i++ )
{
jc *= 2 ;
mp[jc] = 1 ;
}
sort(a.begin(),a.end()) ;
do
{
if ( a[0] == 0 )
continue ;
int sum = 0 ;
for ( int i = 0 ; i < a.size() ; i++ )
{
sum = sum*10 + a[i] ;
}
// cout << sum << "\n" ;
if ( mp.count(sum) )
{
flag = 1 ;
break ;
}
}while (next_permutation(a.begin() , a.end())) ;
return flag ;
}
};