题目:
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
解题思路
1.先建立一个a[31][10]的二维数组,意思是先将2的0到30次幂的每个数都有一个10位的一维数组。
2.把这31个数分解,对应的一维数组上+1;
3.建一个一维数组c[10],把n的个位数存储起来,
4.进行循环遍历,如果存在一个一维数组与n的分解数组全部相等,则返回true,否则,继续遍历,
如果最后没有返回true,则最后返回false。
实验代码:
bool reorderedPowerOf2(int n){
int a[31][10]={0};
int m=1;
int i=1;
a[0][1]++;
while(i<=30)
{
m=m*2;
int b=m;
while(b)
{
a[i][b%10]++;
b/=10;
}
i++;
}
int c[10]={0};
while(n)
{
c[n%10]++;
n/=10;
}
for(int i=0;i<=30;i++)
{
int flag=0;
for(int j=0;j<10;j++)
{
if(a[i][j]==c[j])
{flag=1;continue;}
else
{flag=0;break;}
}
if(flag==1)
return true;
}
return false;
}