(동적 기획) 로봇이 미로를 걷는 문제

6583 단어
4
  • 제목1:https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=46&tqId=29117&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking

  • 4
  • 제목 번역:
         m x n      (       “  ”)。
    
                      。              (       “  ”)。
    
               ?
    
         3×7   。            ?
    
      :m n   100。

     

  • 4
  • 사고방식: 이 문제는 전형적인 동태적 기획 문제이다.여러 개의 작은 문제의 해답을 합치면 최종 원문제의 해답을 해결할 수 있다.얻은 추이식:res[i][j]=res[i-1][j]+res[i][j-1];초기화할 때res 2차원 그룹의 첫 번째 줄과 첫 번째 열을 모두 1로 설정하여 계산하기 편리하게 합니다

  • 4
  • 코드:
    class Solution {
    public:
        int uniquePaths(int m, int n) {
           vectorint>> res(m, vector<int>(n, 1));//          
           for (int i = 1; i)
               for (int j = 1; j){
               res[i][j] = res[i-1][j] + res[i][j-1];
           }
            return res[m-1][n-1];
        }
    };

     

  • 4
  • 문제2:https://www.nowcoder.com/practice/3cdf08dd4e974260921b712f0a5c8752?tpId=46&tqId=29116&tPage=4&rp=4&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking

  • 4
  • 제목 번역:
        ”     :
    
                    。           ?
    
                     1 0。
    
      ,
    
     3x3           ,    。
    
    [
       [0,0,0],
       [0,1,0],
       [0,0,0]
    ]]
    
            2。
    
      :m n   100。

     

  • 4
  • 사고방식: 이 문제는 위에 있는 문제의 파생이고 방법은 dp일 수 있지만 장애물이 나타나는 위치를 특수하게 처리해야 한다.한 줄만 있을 때 어떤 장애물이 나타나면 도착 경로가 0이라고 생각해 보세요.일렬만 있을 때도 마찬가지다.그래서 우선 초기화할 때 첫 줄의 첫 번째 열 위에 장애물이 있는 곳에 path[i][0]와 path[0][i]를 모두 0으로 한다.그리고 우리는 위의 추이식 계산을 이용하여res[i][j]=res[i-1][j]+res[i][j-1]를 계산한다.순환 계산 시 장애물에 부딪히면 path[i][j]를 0으로 설정합니다.이렇게 하면 이 문제를 해결할 수 있다

  • 4
  • 코드:
    class Solution {
    public:
        int uniquePathsWithObstacles(vectorint> > &obstacleGrid) {
            int row = obstacleGrid.size();
            int col = obstacleGrid[0].size();
            
            vectorint> > res(row, vector<int>(col, 0));
            for (int i=0; i//   
                res[0][i] = 1;
                if (obstacleGrid[0][i] == 1){
                    res[0][i] = 0;
                    break;
                } 
            }
            for (int i=0; i//   
                res[i][0] = 1;
                if (obstacleGrid[i][0] == 1){
                    res[i][0] = 0;
                    break;
                } 
            }
            
            for (int i=1; i){
                for (int j=1; j){
                    res[i][j] = res[i-1][j] + res[i][j-1];
                    if (obstacleGrid[i][j] == 1)
                        res[i][j] = 0;
                }
            }
            return res[row-1][col-1];
        }
    };

     

  • 전재 대상:https://www.cnblogs.com/Kobe10/p/6357526.html

    좋은 웹페이지 즐겨찾기