[LeetCode 63] Unique pathII 동적 기획 문제 풀이 예시
격자 하 나 를 지정 합 니 다. 격자 에 있 는 모든 격자 는 0 과 1 로 표시 합 니 다. 그 중에서 0 은 이 격자 가 통과 할 수 있 음 을 나타 내 고 1 은 이 격자 에 장애물 이 있어 통과 할 수 없다 는 것 을 나타 냅 니 다.따라서 이 격자 는 n * m 의 행렬 M 으로 표시 할 수 있 는데 그 중에서 행렬 요 소 는 1 과 0 만 포함 하고 M [0] 에서 M [n - 1] [m - 1] 까지 몇 가지 서로 다른 경로 로 도착 할 수 있 으 며 매번 이동 할 때마다 아래로 또는 오른쪽으로 만 이동 할 수 있다.예 를 들 어 주어진 격자 가 아래 의 격자 행렬 이다.
4. 567913. 수출 결 과 는 2 로 [0] [0] 에서 [2] [2] [2] 까지 아래로 이동 하고 오른쪽으로 이동 하 는 두 가지 서로 다른 경로 로 도착 할 수 있 음 을 나타 낸다.
2. 사고방식 해석
이 문 제 는 주로 동태 계획 의 사상 을 사용 하 는데 동태 계획 의 핵심 사상 은 지난 단계 에 얻 은 수출 결 과 를 다음 단계 에 계산 하 는 입력 으로 하 는 것 이다.이 문제 에서 우 리 는 [0] [0] 에서 [n - 1] [m - 1] 까지 모두 몇 가지 경로 가 있 는 지 계산 해 야 한다. f (M [n - 1] [m - 1]) 로 이동 할 때 아래로 이동 하거나 오른쪽으로 이동 할 수 밖 에 없 기 때문에 [n - 1] [m - 1] 이전에 도착 한 격자 는 [n - 2] [m - 1] 또는 [n - 1] [m - 2] 에서 두 개 만 얻 을 수 있 기 때문에 f (M [n - 1] [m - 1]) 를 쉽게 얻 을 수 있다. = f(M[n-2][m-1]) + f(M[n-1][m-2])。그러면 우 리 는 다음 에 f (n - 2) 와 f (n - 1) 의 값 만 계산 하면 된다.마찬가지 로 f (M [n - 2] [m - 1]) 또는 f (M [n - 1] [m - 2]) 에 대해 서도 항소 방향 으로 계산 할 수 있다.마지막 으로 모든 M [i] [j] 에 대해 우 리 는 f (M [i] [j]) 를 얻 을 수 있 고 행렬 M 과 같은 크기 의 행렬 F 를 얻 을 수 있 으 며 F [n - 1] [m - 1] 을 출력 하면 된다.
행렬 F 를 계산 하 는 방법 은 사실 매우 간단 하 다. 먼저 F [0] [j] 와 F [i] [0] 의 값, 즉 행렬 의 첫 줄 과 첫 번 째 열 을 계산한다.첫 줄 과 첫 번 째 열 에 대해 어떤 M 값 이 1 이면 이전의 F 값 은 모두 1 이 고 그 다음 에는 모두 0 이다.그 다음 에 각 칸 의 f [i] [j] 에 대해 f [i] [j] = f [i - 1] [j] + f [i] [j - 1] 이 있 고 M 값 이 1 이면 대응 하 는 F 값 은 0 이 며 순서대로 유추 하여 행렬 F 를 얻 을 때 까지 F [n - 1] [m - 1] 을 출력 하면 된다.행렬 M 의 경계 상황 을 주의 하면 됩 니 다.
3. 코드 구현
[
[0,0,0],
[0,1,0],
[0,0,0]
]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
124. 두 갈래 나무의 최대 경로와 leetcode비공 두 갈래 트리를 지정하고 최대 경로와 를 되돌려줍니다. 본고에서 경로는 나무의 임의의 노드에서 출발하여 임의의 노드에 도달하는 서열로 정의되었다.이 경로는 루트 노드를 거치지 않고 하나 이상의 노드를 포함합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.