问题描述:给定正整数N,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零,最后得到2的幂次方,如果我们可以通过DFS的方式得到上述得到2的幂
//首先定义将数字分解为数字数组
public String parseInt(int Number)
{
String ret="";
int num=Number;
while(num!=0)
{
int figure=num%10;
ret+=figue;
num=num/10;
}
return ret;
}
//定义判断是否为2的幂次方的函数
public Boolean is2n(int number)
{
int numberOne=0;
while(number!=0)
{
if(numberOne>1)
{
return false;
}
if(number&1==1)
{
numberOne+=1;
}
}
return true;
}
//定义将数字字符串转换为整数
public int parseString(String s)
{
int number=0;
for(int i=s.length();i>0;i--)
{
number*=number;
number+=s.charAt(i);
}
return number;
}
//完成DFS判断函数·
public void?dfs2n(String figure,String reUnite,Boolean flag)
{
if(flag){return;}
if(figue.isEmpty())
{
if( is2n(pasString(reUnite)))
{
flag=true;
}
}
for(int i=0;i<figure.length();i++)
{
char chari=figure.charAt(i);
figue=figure.substring(0,i)+figure.substring(i+1);
dfs2n(figure,reUnit+chari,flag);
reUnit=reUnit.subString(0,reUnit.length()-1);
figure=figure.substring(0,i)+chari+figure.substring(i);
}
}
//最后的大函数
public Boolean is2n(int number)
{
String figure=parseInt(number);
String reUnit=new String("");
Boolean flag=false;
dfs2n(figure,reUnit,flag);
return flag;
}