问题描述
所以有一个递归问题我正在解决,但使用常规 for 循环和增强 for 循环的输出似乎不同,增强 for 循环给出了正确的答案。
注释部分不能正常工作,代替它下方的增强 for 循环
问题是这样 - 1. 给你一个数字 n 和一个数字 m,代表迷宫中的行数和列数。 2. 你站在左上角,必须到达右下角。 3. 在一次移动中,您可以水平跳跃 1 步或更多步(如 h1,h2,.. ),或垂直跳跃 1 步或更多步(如 v1,v2,..)或对角线跳跃 1 步或更多步(如 d1,d2,...)。 4. 完成getMazePath 函数的主体——不改变签名——得到可用于从左上角移动到右下角的所有路径的列表。 使用示例输入和输出来了解输出。
public static void main(String[] args) throws Exception {
Scanner sn=new Scanner(system.in);
int n=sn.nextInt();
int m=sn.nextInt();
ArrayList<String> ll=getMazePaths(0,n,m);
System.out.println(ll);
}
public static ArrayList<String> getMazePaths(int sr,int sc,int dr,int dc) {
if(sr==dr-1 && sc==dc-1){
ArrayList<String> nl=new ArrayList<>();
nl.add("");
return nl;
}
ArrayList<String> ral=new ArrayList<>();
for(int i=1;i<=dc-sc;i++){
ArrayList<String> hl=getMazePaths(sr,sc+i,dr,dc);
//This Should Work the Same as The Enhanced For loop Below it but its not producing same
//output
// for(int j=0;i<hl.size();j++){
// ral.add("h"+i+hl.get(j));
// }
for(String p:hl){
ral.add("h"+i+p);
}
}
for(int i=1;i<=dr-sr;i++){
ArrayList<String> vl=getMazePaths(sr+i,sc,dc);
// for(int j=0;i<vl.size();j++){
// ral.add("v"+i+vl.get(j));
// }
for(String p:vl){
ral.add("v"+i+p);
}
}
for(int i=1;i<=dc-sc && i<=dr-sr ;i++){
ArrayList<String> dl=getMazePaths(sr+i,dc);
// for(int j=0;i<dl.size();j++){
// String ss=dl.get(j);
// ral.add("d"+i+ss);
// }
for(String p:dl){
ral.add("d"+i+p);
}
}
return ral;
}
解决方法
您使用的是 i 而不是 j :
这个:
// for(int j=0;i<hl.size();j++){
// ral.add("h"+i+hl.get(j));
// }
应该是:
for(int j=0;j<hl.size();j++){
ral.add("h"+i+hl.get(j));
}