LeetCode 62 【动态规划】

it2024-08-17  40

package leecode.dynamic_programming; /** * @author: 老张爱吃西蓝花 * @description: https://leetcode-cn.com/problems/unique-paths/ * @date: 2020/10/21 11:07 */ public class q_62 { public static void main(String[] args) { System.out.println(solutions(45,4)); } public static int solutions(int m, int n) { //找到边界条件和特殊情况 if (m == 0 || n == 0){ return m + n; } //定义DP数组 int[][] dp = new int[m][n]; //结合上面的特殊情况,可以看出单m/n==0时,只需要直接向下或向右,因此直接置上边界、左边界得值为 i // - 当n为0时 for (int i = 0; i < m; i ++){ dp[i][0] = 1; } // - 当m为0时 for (int j = 0; j < n; j ++){ dp[0][j] = 1; } //找到DP数组元素关系式, 在这里:dp[i][j]=x代表了走了[i,j]这个位置需要x步 //而走到[i,j]这个位置, 有2种方法: 从[i-1][j]向右一步; 从[i][j-1]向下一步 //因此数组转移(状态关系)就找到了: dp[i][j] = dp[i-1][j] + dp[i][j-1] for (int i = 1; i < m; i ++){ for (int j = 1; j < n; j ++){ dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } return dp[m-1][n-1]; } }
最新回复(0)