【问题标题】:Java recursion in array- find path from array[0] to array[length-1]数组中的 Java 递归 - 查找从数组 [0] 到数组 [长度-1] 的路径
【发布时间】:2018-06-17 13:16:38
【问题描述】:

我正在尝试编写递归方法,如果存在从 a[0] 到 a[a.length-1] 的路径,则当您可以对 a[i] 求和或减去时,该方法返回 true。 例如在数组 a={2,4,1,6,4,2,4,3,5} 中,该方法返回 true,因为 0+2-1+4+2-3+4 = 8 = a[a .length-1]。 我尝试了几种方法,但出现堆栈溢出或错误输出。

public static boolean isWay(int[] a){

return isWay(int[] a, int ind, int way)
}

private static boolean isWay(int[] a, int ind, int way){
   if(way==0)
   return true;
   if(way > a.length-1, || way < 0 )
   return false;
   if(ind > a.length-1 || ind < 0)
   return false;

   return isWay(a, ind+a[ind], way-a[ind]) || isWay(a, ind-a[ind],way+a[ind]);
}

【问题讨论】:

  • 什么是return isWay(int[] a, int ind, int way)?我猜你想为此设置默认值……对吧?
  • 你试过写(单元)测试用例吗?
  • @Lino 更具体地说,indway 是什么?此外,不会编译,但如果错误已修复(return isWay(int[] a, int ind, int way) -> return isWay(a, 0, a.length - 1);way &gt; a.length-1, || way &lt; 0 -> way &gt; a.length-1 || way &lt; 0),它适用于您的示例输入
  • a[a.length-1] 是 5,它是最后一个元素....您需要更好地描述您要解决的问题。您想看看是否可以从第一个元素开始到达最后一个元素并在元素之间求和/减去?

标签: java arrays recursion path


【解决方案1】:

试试这段代码。它从开头(索引 0)到结尾(索引 a.length-1)搜索一条路。

public static void main(String[] args) {
    System.out.println(isWay(new int[] {2,4,1,6,4,2,4,3,5}, 0));
    System.out.println(isWay(new int[] {2,7,3,8,5,1,2,1,2}, 0));
    System.out.println(isWay(new int[] {7,7,7,7}, 0));
}

public static boolean isWay(int[] a, int index) {
    if (index == a.length-1) return true;
    if (index > a.length-1 || index < 0) return false;
    return isWay(a, index+a[index]) || isWay(a, index-a[index]);
}

【讨论】:

  • 你的答案很好,但是这个数组呢:int[] a = {1,4,3,1,2,4,3},你会得到一个堆栈溢出,因为算法会将 a[1] +4 添加到 a[5],然后 a[5] - 4 = a[1] 没有结束。
  • 你是对的。我会再看看它。
【解决方案2】:
    public static boolean isWay(int[] a)
{
    return isWay(a,0);
}
private static boolean isWay(int[] a, int ind)
{
    if  (ind < 0 || ind>a.length-1)
        return false;
    if  (a[ind]<0)
        return false;
    if  (ind == a.length-1)
        return true;
    int tmp = a[ind];
    a[ind] = -1;
    return  isWay(a, ind+tmp) || isWay(a, ind-tmp);
}

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2018-09-15
    相关资源
    最近更新 更多