• 62. Unique Paths


    机器人走棋盘,左上到右下。

    比较典型的动态规划,某个格的情况无非是从上面或者从左边来,两者相加就行。

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

    空间上似乎可以优化。

    只保留当前列和前一列,就有上面和左面的值。

    三刷再看看。


    三刷?

    棋盘里找路径,典型的DP。

    dp[i][j]的值来自于dp[i-1][j]和dp[i][j-1]

    需要优化的是空间。

    dp[i][j]算出来之后,他的值会被使用2次,一次是贡献给他左边的格子dp[i][j+1],一次是他下面的格子dp[i+1][j]。

    我们遍历进行计算的时候,是一行一行来的,每个格子的值来源于上这一行的前一个格子(左边),和上一行的同一个格子(上边),然后更新。

    水平方向的贡献是累加的,可以适时更新每一行。

    public class Solution {
        public int uniquePaths(int m, int n) {
            
            int[] dp = new int[n+1];
            dp[1] = 1;
            
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    dp[j+1] = dp[j+1] + dp[j];
                }
            }
            
            return dp[n];
        }
    }
    
  • 相关阅读:
    订餐系统
    throw和throws
    CF999E Solution
    CF1142B Solution
    CF965C Solution
    CF963B Solution
    CF999F Solution
    CF975D Solution
    CF997B Solution
    hdu 2553 N皇后
  • 原文地址:https://www.cnblogs.com/reboot329/p/6206191.html
Copyright © 2020-2023  润新知