品牌购买网站,西安建设市场诚信信息平台网站,六安seo曝光行者seo,地图类网站开发实战教程本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组#xff1a;dp[i][j]表示走到#xff08;i#xff0c;j#xff09;有多少种路径
确定递推公式#xff1a;我们这里#xff0c;只有两个移动方向#xff0c;比如说我移动到#xff08;i#xff0c;j#x… 本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组dp[i][j]表示走到ij有多少种路径
确定递推公式我们这里只有两个移动方向比如说我移动到ij那么只能从i-1j或者从ij-1移动所以dp[i][j] dp[i-1][j] dp[i][j-1]。因为我们求的是路径并不是步数所以从dp[i-1][j]到dp[i][j]只有一个路径同理所以二者相加即可。
初始化我们要知道只能向下或者向右走也就是说只有两个移动方向那么如果我们只在第一行移动的时候dp[0][j]1数组的值都是1同理只在第一列上移动dp[i][0]1
遍历顺序我们直接从左到右从上到下依次遍历即可题中规定
打印
class Solution {public int uniquePaths(int m, int n) {int[][] dp new int[m][n];for(int i 0;im;i){dp[i][0] 1;}for(int j 0;jn;j){dp[0][j] 1;}for(int i 1;im;i){for(int j 1;jn;j){dp[i][j] dp[i-1][j]dp[i][j-1];}}return dp[m-1][n-1];}
}注意
初始化的时候按照上述分析直接初始化即可第一行或者第一列只有一种路径。在初始化的时候只需要初始化到m-1/n-1因为我们是从下标0开始的。在遍历的时候我们应该从1开始因为0已经初始化了行/列。我们for循环结束的条件就是im/jn因为我们最后是要走到ij的路径个数但数组我们是从0开始的所以只需要m就可以并不需要im并直接返回dp[m-1][n-1]即可。