[leetcode]Unique Paths

本文讨论了使用递归和动态规划两种方法解决从左上角到右下角的不同路径数量问题,并提供了相应的代码实现。递归方法虽然直观但容易导致重复计算,而动态规划则通过创建二维数组来存储子路径的数量,从而避免了重复计算,提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目意思

统计从左上角到右下角的所有不同路径个数。
  1. 思路一:直接使用递归
    因为从第一步走到第二步,和从第二步走到第三步,问题的模型是一样,有一样的结构。

  2. 思路二:动态规划,思路一的话,会超时,因为要计算很多重复的字路径。动态规划就是新建一个跟原来大小一样的二维数组,从右下角开始计算每一个方格到右下角的路径数。这样就可以重复利用子路径。

    很经典的动态规划题目 使用从底到上的思路

    思路一代码:

    int sum=0,tm=0,tn=0;
    public int uniquePaths(int m, int n) {
        tm=m;
        tn=n;
        recursion(0,0);
        return sum;   
    }
    public void recursion(int m,int n){
        if(m==tm-1&&n==tn-1){
            sum++;
            return;
        }
        boolean flag=false;
        if(n<tn-1){
            flag=true;
            n++;
            recursion(m,n);
        } 
        if(m<tm-1){
            if(flag)
                n--;
            m++;
            recursion(m,n);
        }

    }

思路二代码:这个是通过了的

public int uniquePaths(int m, int n) {
        int[][] a=new int[m][n];
        a[m-1][n-1]=1;
        for(int row=m-1;row>=0;row--){
            for(int col=n-1;col>=0;col--){
                if(row==m-1&&col==n-1)
                    continue;
                if(row==m-1)
                    a[row][col]=a[row][col+1];
                 else if(col==n-1)
                    a[row][col]=a[row+1][col];
                else    
                    a[row][col]=a[row][col+1]+a[row+1][col];   
            }
        }
        return a[0][0];    
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值