// #define DEBUG
classSolution{public:boolans=false;boolisValid(intx){// x & x - 1 将 x 的最高位置位为0
return(x&x-1)==0;}boolreorderedPowerOf2(intx){stringnumStr=to_string(x);intn=numStr.size();sort(numStr.begin(),numStr.end());vector<bool>vis(n,false);dfs(numStr,0,vis,0);returnans;}voiddfs(string&num,intidx,vector<bool>&vis,intpath){#ifdef DEBUG
cout<<path<<endl;#endif
if(idx==num.size()){if(isValid(path)){ans=true;}return;}for(inti=0;i<num.size();i++){// frefix
if(path==0&&num[i]=='0'){continue;}// delete same num
if(i>0&&num[i]==num[i-1]&&vis[i-1]==false){continue;}if(ans==true){return;}if(vis[i]==false){vis[i]=true;dfs(num,idx+1,vis,path*10+num[i]-'0');vis[i]=false;}}}};