大家, 需要你的帮助,我有一个任务在java中编写一个方法。 这个方法的作用是检查是否有一个从数组开头的路径,它允许通过数组中的值到达数组的末尾。 例如: 如果我收到了阵列: 2 4 1 6 4 2 4 3 5 返回的答案将是真实的,因为有一个以单元格0开头的路径,两个单元格向右移动 对于细胞2,从那里一个隔室离开到细胞1,并且从那里四个细胞到右细胞5,然后再到两个细胞 细胞直接进入细胞7,从那里三个细胞离开到细胞4,从那里有四个细胞到右细胞 8是数组中的最后一个。
我设法建立了一个好的算法,但我无法弄清楚我的代码有什么问题。 非常感谢帮助。
这是我的代码:
public static boolean isWay(int []a){
if(a[0]==0)//not go to anywhere
return false;
return isWay(a,0);
}
private static boolean isWay (int[]a,int i){
if(i==a.length)
return true;
if(a[i]==0)
return false;
int temp = new int [i];
a[i]=0;
if(i+temp<a.length&& i-temp>0)
return (isWay(a,i+temp))||isWay(a,i-temp);
if(i+temp<a.length)
return (isWay(a,i+temp));
if(i-temp>0)
return (isWay(a,i-temp));
return false;
答案 0 :(得分:0)
您的代码存在两个问题:
int temp = new int [i];
应该是int temp = a[i];
i + temp < a.length
,但这样您永远不会找到temp
,i + temp == a.length
;将<
更改为<=
此外,您可以通过移动索引越界检查来简化代码:
private static boolean isWay(int[] a, int i) {
if (i == a.length)
return true;
if (i < 0 || i > a.length) // just check here
return false;
if (a[i] == 0)
return false;
int temp = a[i];
a[i] = 0;
return (isWay(a, i + temp)) || isWay(a, i - temp);
}