算法小知识-----04.06-----不同路径

86 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

今天的每日一题,没有看懂,但是这并不是不刷题的理由,找一道热门题

不同路径

该题出自力扣的62题 —— 不同路径【中等题】。这道题是中等题里面相对比较简单的(抛开数学解法不谈)

审题

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?

image.png

  • 该题题意也比较明朗,就是给定一个M × N 的矩形,从左上角出发,每次只能往下或者右走一步,直至走到右下角,求出可以走多少种方式
  • 抛开业务不谈,是经典的动态规划题
  • 首先,简单讲解一下动态规划:
    • 动归和分治法(回溯)也是拆解成小问题去解决
    • 动态规划是每一个小问题之间都存在对上一个问题的规律
    • 回溯法,通俗的说就是一头扎到底,最终汇总所有的答案,进行整理返回。将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解
  • 解法:
    • 定义一个二维数组,长度为m、n
    • 双重for循环
    • 判断边界范围,如果当前处于边界(m/n = 0),又因为每次只能往下或者往右走,所以只能为1
    • 规律 = 当前位置的方式 = 上一格的方式 + 左边格的方式

编码

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] a = new int[m][n];
        for (int i= 0;i<m;i++){
            for (int j = 0;j<n;j++){
                if (i ==0 || j == 0)a[i][j] = 1;
                else {
                    a[i][j] = a[i-1][j] + a[i][j-1];
                }
            }
        }
        return a[m-1][n-1];
    }
}

image.png