代码随想录算法训练营第三十九天 | 不同路径、不同路径 II

● 今日学习的文章链接和视频链接

题目62.不同路径
题目63. 不同路径 II

● 看到题目的第一想法

找路径

● 看完代码随想录之后的想法

EZ

● 实现过程中遇到哪些困难

和之前机器人的实验很像,写的快

● 解题代码

  1. 点击查看代码
    class Solution {
        public int uniquePaths(int m, int n) {
    		int[][] dp = new int[m][n];
    		for (int i = 0; i < n; i++) {
    			dp[0][i] = 1;
    		}
    		for (int i = 0; i < m; i++) {
    			dp[i][0] = 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];
        }
    }
    
  2. 点击查看代码
    class Solution {
        public int uniquePathsWithObstacles(int[][] obstacleGrid) {
    		int m = obstacleGrid.length;
    		int n = obstacleGrid[0].length;
    		int flag = 0;
    		int[][] dp = new int[m][n];
    		if(obstacleGrid[m - 1][n - 1] == 1){
    			return 0;
    		}
    		for (int i = 0; i < n; i++) {
    			if(obstacleGrid[0][i] == 1){
    				flag = 1;
    			}
    			if(flag == 0){
    				dp[0][i] = 1;
    			}else{
    				dp[0][i] = 0;
    			}
    		}
    		flag = 0;
    		for (int i = 0; i < m; i++) {
    			if(obstacleGrid[i][0] == 1){
    				flag = 1;
    			}
    			if(flag == 0){
    				dp[i][0] = 1;
    			}else{
    				dp[i][0] = 0;
    			}
    		}
    		flag = 0;
    		for (int i = 1; i < m; i++) {
    			for (int j = 1; j < n; j++) {
    				if(obstacleGrid[i-1][j] == 1 && obstacleGrid[i][j-1] == 1){
    					dp[i][j] = 0;
    				}
    				if(obstacleGrid[i-1][j] == 1 && obstacleGrid[i][j-1] == 0){
    					dp[i][j] = dp[i][j-1];
    				}
    				if(obstacleGrid[i-1][j] == 0 && obstacleGrid[i][j-1] == 1){
    					dp[i][j] = dp[i-1][j];
    				}
    				if(obstacleGrid[i-1][j] == 0 && obstacleGrid[i][j-1] == 0){
    					dp[i][j] = dp[i-1][j] + dp[i][j-1];
    				}
    			}
    		}
    		return dp[m - 1][n - 1];
        }
    
    }
    

● 今日收获,学习时长

今日收获:学习了DP找路径
学习时长:1h
posted @ 2024-01-06 17:03  雨年今天有记录吗  阅读(1)  评论(0)    收藏  举报