力扣热题100之62:
先贴代码:
class Solution {public int uniquePaths(int m, int n) {// 创建棋盘int[][] board = new int[m][n];// 将第0列的格子路径设为1for (int i = 0; i < m; i++) {board[i][0] = 1;}// 将第0行的格子路径设为1for (int j = 0; j < n; j++) {board[0][j] = 1;}// 往后累加格子的路径数for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {board[i][j] = board[i-1][j] + board[i][j-1];}}return board[m-1][n-1];}
}
解题思路:
题目中告诉我们,需要抵达棋盘的终点(右下角),并且机器人只能一次向右或者向下移动一步,那么当我们抵达一个格子时,只能是从它的左边或者上边过来,由此我们可以推断出:
抵达一个格子的路径数 = 抵达这个格子左边格子的路径数 + 抵达这个格子上边格子的路径数;
即表达式为: f( i , j ) = f( i - 1 , j ) + f( i , j - 1 );
我们先将第0行和第0列的格子全部设为1,表示从起始点走到这些格子有且只有一条路径可以走,我们拿一个 3 * 6 的棋盘举例:
再来开始依次计算剩下空白的格子的路径数,因为由上可知表达式:
f( i , j ) = f( i - 1 , j ) + f( i , j - 1 );
所以在求一个格子的路径数时,只要把左边格子 + 上边格子 即可。求得剩下格子路径数为:
由此就可以得出 到达终点的路径数为 15 + 6 = 21 !
本文发布于:2024-01-31 16:28:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668971329860.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |