For 和增强的 For 循环在 Java 递归问题中给出不同的输出

问题描述

所以有一个递归问题我正在解决,但使用常规 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));
}