我正在尝试编写递归方法,如果有一个从[0]到[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 。长度-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]);
}
答案 0 :(得分:0)
试试这段代码。它搜索从开头(索引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]);
}
答案 1 :(得分:0)
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);
}