a*算法求解八数码问题python,a*算法实现八数码问题Python
主题描述:
只包含因子2、3、5的数叫做丑数。比如6和8是很丑的数字,但14不是,因为它包含了因子7。习惯上认为1是第一个难看的数字。从小到大求第n个丑数。
分析:
首先,我写了从1开始判断一个自然数是否丑,直到找到第n个丑的数。这种方法显然需要时间。(判断一个数是否丑的思路:如果一个数能被2整除,如果能被2连续整除,就能被3连续整除;如果能被5整除,就除以5。如果我们最后得到1,那个量就是一个难看的量,否则就不一样了。)
想法:
只包含因子2、3、5的数叫做丑数。也就是说,一个难看的数一定是2、3、5的乘积。将现有的丑数保存为数组,计算未来的丑数。(牺牲空间换取时间)
这个方法的关键是排序。因为每一个丑数都是另一个丑数乘以2/3/5,所以所有的丑数都要存储,前面的下标都要记住。如果丑数乘以前一个数的2/3/5后被用过,对应的下标就前移一。
回答:
类别解决方案{
publicintgetuglynumber _ solution(int index){
If (index=6)返回索引;
int i2=0,i3=0,i5=0;
int[]DP=new int[index];
DP[0]=1;
for(intI=1;我
DP[I]=math.min(DP[I2]*2,math.min) dp[i5]*5,dp[i5]*5)//其中最小的是下一个难看的数
//将现有数量前移
if(DP[I]==DP[I2]* 2)I2;
if(DP[I]==DP[I3]* 3)I3;
if(DP[I]==DP[I5]* 5)I5;
}
回到DP[index-1];
}
}
执行结果
在线编程的主题是你的逻辑思维。你不可能写那么多代码,所以我相信代码越简单越好。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。