하나, 제목 설명
둘째, 문제 해결 아이디어
의 고급 버전이 다른 경로는 , dp
대답, 그것은 분명 그 두 차원 동적 프로그래밍
- 정의
dp
의미 : 정의 좌표 올 이이 도보 거리에 - 정의 경계 조건
- 단지 하나의 움직임이 있기 때문에 첫 번째 열의 첫 번째 행에 장애물에서 첫 번째 열의 첫 번째 행은 1이다 확실히
- 첫 번째 열의 첫 번째 줄에 장애물이있는 경우 그 경우 그러나, 당신은 단지 지점 뒤에 장애물을 포함하여 장애물의 전면으로까지 갈 수
dp
값이 0
- 상태 천이 방정식의 설립
- 있는 현재의 로봇을 가정
, 기본
dp[i][j] = 0;
- 지점 인 경우가 장애물, 그래서
dp[i][j]
에만 0이 될 수 있습니다 - 지점 인 경우 장애물이 없다
- 위의 점
- 다음 위의 경로가 차단 장애물 만 다음 왼쪽에서 올 수있다
dp[i][j]
동일, 플러스 0 - 장애물이 없습니다, 다음, 위에서 올 수
dp[i][j] += dp[i - 1][j]
- 마무리 :
dp[i][j] += (obstacleGrid[i][j - 1] ? 0 : dp[i][j - 1]);
- 다음 위의 경로가 차단 장애물 만 다음 왼쪽에서 올 수있다
- 왼쪽 지점
- 마찬가지로 :
dp[i][j] += (obstacleGrid[i - 1][j] ? 0 : dp[i - 1][j]);
- 마찬가지로 :
- 위의 점
- 지점 인 경우가 장애물, 그래서
- 있는 현재의 로봇을 가정
, 기본
셋째, 문제 해결 코드
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
auto m = obstacleGrid.size();
auto n = obstacleGrid[0].size();
unsigned int dp[m][n];
bool flag = 0;
for(int i = 0; i < m; i++){
if(!obstacleGrid[i][0] && !flag)
dp[i][0] = 1;
else{
dp[i][0] = 0;
flag = 1;
}
}
flag = 0;
for(int i = 0; i < n; i++){
if(!obstacleGrid[0][i] && !flag)
dp[0][i] = 1;
else{
dp[0][i] = 0;
flag = 1;
}
}
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
dp[i][j] = 0;
if(obstacleGrid[i][j] == 0){
if(obstacleGrid[i][j - 1] == 0)
dp[i][j] += (obstacleGrid[i][j - 1] ? 0 : dp[i][j - 1]);
if(obstacleGrid[i - 1][j] == 0)
dp[i][j] += (obstacleGrid[i - 1][j] ? 0 : dp[i - 1][j]);
}
}
}
return dp[m - 1][n - 1];
}
};
넷째, 운영 결과
매우 거만 운영 결과의 그룹이 있습니다 :
[0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,1,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1] [0,0,0,0,0,1, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0, 0,0], [1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0, 0,0,0,0,0,0,0,1,0,0,1] [0,0,1,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0], [0,0,0,1, 0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,1,1,0], [1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0] [0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0] [0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,0,1,0] [0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,1,1,0,0,0,1,0,0,0,0,0] [0,1,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [ 1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0, 1,0,1,0,0,0,0,1] [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0] [0,1,0,1,0,0,0,0,1,0,0, 1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0] [0,1, 0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,1,1,0,1] [1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0], [ 0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1, 0,1,0,0,0,0,1,1] [0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1] [1,1,1,0,1,0,0, 0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0, 0] [0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, 0,0,0,0,0,0,0,0,1,1] [0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0]0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0, 0,0,1,1,0,0,1,0,0,0,0,0,0] [0,0,1,0,0,0,0,0,0,0,1, 0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1] [0,1, 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0, 1,1,0,1,0,1] [1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0, 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0] [0,0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1], [ 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, 1,0,0,0,1,0,0,0]0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0, 0,0,1,1,0,0,1,0,0,0,0,0,0] [0,0,1,0,0,0,0,0,0,0,1, 0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1] [0,1, 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0, 1,1,0,1,0,1] [1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0, 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0] [0,0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1], [ 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, 1,0,0,0,1,0,0,0]
내 데이터 오버 플로우, 우리가 말하고 싶은 이야기의 직접적인 결과 dp
로 설정되어있는 배열을 unsigned int
피하기 오버 플로우 유형,