计算数组

时间:2018-01-09 10:36:23

标签: java

大家, 需要你的帮助,我有一个任务在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;

1 个答案:

答案 0 :(得分:0)

您的代码存在两个问题:

  • int temp = new int [i];应该是int temp = a[i];
  • 您检查是否i + temp < a.length,但这样您永远不会找到tempi + 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);
}