zoukankan      html  css  js  c++  java
  • leetcode(63)不同路径 2

    不同路径2

    解题思路:动态规划+自底向上+去除障碍

    class Solution {
        public int uniquePathsWithObstacles(int[][] obstacleGrid) {
            int xlen = obstacleGrid.length;
            int ylen = obstacleGrid[0].length;
            int min = Math.min(xlen,ylen);
            int max = Math.max(xlen,ylen);
            int[][] flags = new int[2][min];
            boolean minflags = false;
            boolean maxflags = false;
            int cur = 0;
            int sum = 0;
            if(min==xlen){
                for(int i=0;i<xlen+ylen-1;++i){
                    sum = 0;
                    for(int j=0;j<min;++j){
                        if(i-j>=0&&i-j<max){
                            if(obstacleGrid[j][i-j]==1){
                                flags[cur][j] = 0; 
                                if(j==0&&!minflags){
                                    minflags = true;
                                }
                                if(i-j==0&&!maxflags){
                                    maxflags = true;
                                }
                            }else{
                                if(j==0||i-j==0){
                                    if(j==0&&!minflags||i-j==0&&!maxflags){
                                        flags[cur][j] = 1; 
                                    }else{
                                        flags[cur][j] = 0;  
                                    }
                                }else{
                                    flags[cur][j] = flags[1-cur][j-1] + flags[1-cur][j];
                                }
                            }
                            sum += flags[cur][j];
                        }
                    }
                    if(sum==0){
                        return 0;
                    }
                    cur = 1 - cur;
                }
            }else{
                for(int i=0;i<xlen+ylen-1;++i){
                    sum = 0;
                    for(int j=0;j<min;++j){
                        if(i-j>=0&&i-j<max){
                            if(obstacleGrid[i-j][j]==1){
                                flags[cur][j] = 0; 
                                if(j==0&&!maxflags){
                                    maxflags = true;
                                }
                                if(i-j==0&&!minflags){
                                    minflags = true;
                                }
                            }else{
                                if(j==0||i-j==0){
                                    if(j==0&&!maxflags||i-j==0&&!minflags){
                                        flags[cur][j] = 1; 
                                    }else{
                                        flags[cur][j] = 0;  
                                    }
                                }else{
                                    flags[cur][j] = flags[1-cur][j-1] + flags[1-cur][j];
                                }
                            }
                            sum += flags[cur][j];
                        }
                    }
                    if(sum==0){
                        return 0;
                    }
                    cur = 1 - cur;
                }
            } 
            return flags[1-cur][min-1];
        }
    }
  • 相关阅读:
    2020 HDU校赛 Problem J
    2020 HDU校赛 Problem I
    2020年HDU校赛 Problem A
    HDU 2553 N皇后 (dfs+回溯)
    D
    #6177. 「美团 CodeM 初赛 Round B」送外卖2(floyed + 三进制枚举 )
    E
    B
    大数加法模板(可能有问题,目前没发现)
    H
  • 原文地址:https://www.cnblogs.com/erdanyang/p/11248893.html
Copyright © 2011-2022 走看看