leetcode算法练习【62】不同路径

所有题目源代码:Git地址

题目

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?


在这里插入图片描述

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:

输入: m = 7, n = 3
输出: 28
 

提示:

1 <= m, n <= 100
题目数据保证答案小于等于 2 * 10 ^ 9

方案1:排列组合,杠精本精

  • 就是C几取几,实现下就好了,注意下整数除法的问题就行
class Solution {
        public int uniquePaths(int m, int n) {
            //排列组合,钢精本精
            double ans= 1;
            for(int i = 1;i<n;i++){
                ans *=(m+i-1);
                ans=ans/i;
            }
            return (int)ans;
    }

方案2:动态规划

  • 最基础的动态规划
class Solution {
        public int uniquePaths(int m, int n) {
            //这里用动态规划,类似与楼梯问题
            int[][] tmp = new int[n+1][m+1];
            tmp[1][1] = 1;
            //init
           for (int i = 1;i<=n;i++){
               tmp[i][1] = 1;
           }
           for(int j = 2;j<=m;j++){
               tmp[1][j] = 1;
           }

            for(int i = 2;i<=n;i++){
                for(int j = 1;j<=m;j++){
                    tmp[i][j] = tmp[i-1][j]+tmp[i][j-1];
                }
            }

            return tmp[n][m];

        }
    }
复杂度计算
  • 时间复杂度:O(mn)
  • 空间复杂度:O(mn),可能浪费了点空间,但是相差不大

杂记

  • Java中int数组默认初始化的元素值是0
  • Java中boolean数组默认初始化的元素值是false
原创文章 179 获赞 270 访问量 34万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/106048929