从正整数 N
开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true
;否则,返回 false
。
示例 1:
输入:1
输出:true
示例 2:
输入:10
输出:false
示例 3:
输入:16
输出:true
示例 4:
输入:24
输出:false
示例 5:
输入:46
输出:true
C++
class Solution {
public:
bool reorderedPowerOf2(int N)
{
vector<string> tmp;
int num=N;
int len=to_string(N).size();
int k=1;
while(to_string(k).size()<=len)
{
string str=to_string(k);
if(len==str.size())
{
tmp.push_back(str);
}
k*=2;
}
string tt=to_string(N);
map<char,int> vec;
for(auto c:tt)
{
vec[c]++;
}
for(auto ss:tmp)
{
map<char,int> haha;
for(auto c:ss)
{
haha[c]++;
}
if(vec==haha)
{
return true;
}
}
return false;
}
};
python
class Solution:
def reorderedPowerOf2(self, N):
"""
:type N: int
:rtype: bool
"""
tmp=[]
while N:
tmp.append(N%10)
N//=10
tmp.sort()
max_val=0
m=len(tmp)
flag=0
index=0
for i in range(m-1,-1,-1):
max_val=max_val*10+tmp[i]
if 0==tmp[0]:
for i in range(1,m):
if tmp[i]>0:
flag=1
index=i
tmp[0],tmp[i]=tmp[i],tmp[0]
break
min_val=0
for i in range(0,m):
min_val=min_val*10+tmp[i]
if flag:
tmp[0],tmp[index]=tmp[index],tmp[0]
res=[]
val=1
while val<=max_val:
if val>=min_val:
res.append(val)
val*=2
n=len(res)
tmp1=[]
for i in range(0,n):
while res[i]:
tmp1.append(res[i]%10)
res[i]//=10
tmp1.sort()
if tmp==tmp1:
return True
tmp1=[]
return False