一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
今天的每日一题,没有看懂,但是这并不是不刷题的理由,找一道热门题
不同路径
该题出自力扣的62题 —— 不同路径【中等题】。这道题是中等题里面相对比较简单的(抛开数学解法不谈)
审题
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
- 该题题意也比较明朗,就是给定一个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];
}
}