브러쉬 제목 leetcode 노트 - 다른 경로

프로 62 다른 경로

주제 설명 :

m × n에 그리드의 왼쪽 상단 모서리에있는 로봇 

로봇은 오른쪽이나 아래로 한 단계를 이동할 수 있습니다. 로봇은 그리드의 오른쪽 하단에 도달하려고합니다

Q. 총에 얼마나 많은 서로 다른 경로?

문제 해결 아이디어 :

1.

이것은 가장 명백한 자기 결합 배치는, 내려가 단계의 수는 고정되고 오른쪽 왼쪽 및 오른쪽 하단에서 온이되도록 선택된 N (m-1) + (N -1) 단계 (오른쪽 동일하게 m-1 단계로서 선택 될 수있다) -1 문제의 조합의 하부 데크 향해 이동. 따라서, 서로 다른 경로의 총 수 .

다음과 같이 코드입니다 :

// 치환 방법은 단계 떠나는 m + N-2의 합계로서 이해 될 수 있고, m-1 선택 하부 데크를 향해 이동하는 상기
     //가 오버플로 할 때 m, n은 크게 발생할 더블 사용, 
    공적  INT (uniquePaths를 INT의 m을 INT N-) 
    { 
        더블 결과 계승 = (N-m-2 + ,.)로 -N- 1 / 계승 (m-1,0 )
         // 에서 System.out.println (결과), 
         ( INT ) 결과; 
    } 

    // 계승 기능 
    공공  더블 계승 ( INT 시작 INT의 끝) {
         더블 RES의 = 1. ,
         대한 ( 더블 I = 시작; I> 끝; 난 -  ) {
            RES입술 * = I; 
        } 

        반환 입술을; 
    }

2.

제 아이디어는 모든 위치에서 그 점은 상기 다운 단계를 취하거나, 오른쪽으로 한 단계 더 나아가 좌측 포인트 동적 프로그래밍 알고리즘이다. 첫 번째 열의 첫 번째 라인과 모든 점에 도달하는 하나의 경로가 있습니다.

모두는 다음을 달성하기 위해 :

// n 행과 m 열, 즉 m * n 개의 격자
     // 모든 경로 위치에 와서는 [I] [J]를 위치 전체 경로 같다 [I-1] [J]를 더한 위치 [I] [J-1] 모든 경로 
    공개  INT uniquePaths1 ( INT m, INT N-) {
         INT [] [] = 경로 새로운 새  INT [N- [m];
         // 첫 번째 행 
        에 대한 ( INT , I은 m이 <; I = 0 I가 ++) 경로 [ 0] [I] = 1이다. ]
         // 첫 번째 열 
        을위한 ( INT J = 0; J <N-, J ++) 경로 [J] [0] = 1이다. ]
          ( INT I = 1]. I은 m이 <; I는 ++ ) {
              ( INT . J <N-; J ++ J = 1 ) {
                경로 [J] [I] = 경로 [J] [I-1] + 경로 [J-1 ] [I]; 
            } 
        } 
        리턴 경로 [N-1] [m-1 ]; 
    }

Pro63. 다른 경로 ||

주제 설명 :

(62) 및 이와 유사한 질문, 그냥 그리드에서 더 많은 장애물을 지불합니다. 입력 격자, 장애물 및 빈 격자의 위치를 각각 나타내는 이차원 배열  1 하고  0 표시한다.

이제 그리드 장애물을 고려하십시오. 그래서 얼마나 많은 서로 다른 경로 왼쪽 상단에서 오른쪽 하단에있을 것인가?

문제 해결 아이디어 :

위치는 장애의 경우 장애물의 경우, 포인트가 0으로 설정된 모든 점에 도달하는 경로의 수에 도달 할 수 없습니다. 배리어위한 눈금이 존재하는 경우, 첫 번째 행과 첫 번째 열의 초기화 동안, 다음 표의 오른쪽 / 바닥 도달한다.

코드 구현 :

공개  INT uniquePathsWithObstacles ( INT [] [] obstacleGrid) {
         // 若数组为空
        경우 (obstacleGrid.length == 0) 복귀 0 ; 
        
        INT LEN = obstacleGrid.length;
        INT는 = obstacleGrid [0 떨어 졌 ] .length 단계;
        INT [] [] = 경로 새로운  INT [LEN] 떨어 졌]; 
        
        // 第一列
         ( int로 I = 0; I <렌; 내가 ++ ) {
             경우 (obstacleGrid [I] [0] == 1) 파괴 ; 
            경로 [I]이 [ 0] = 1 ; 
        } 
        //첫 번째 행 
        에 대한 ( INT J = 0; J <WID; J ++ ) {
             IF (obstacleGrid [0] [J] == 1). BREAK , 
            경로 [ . 0] [J] = 1 ; 
        } 
         ( INT I = 1이다.; I 렌 <; I는 ++ ) {
              ( INT J = 1]. J <WID; J ++ ) {
                 // 장애의 포인트, 포인트는 경로의 개수가 0에 도달하면 
                IF . (obstacleGrid [I] [J] == 1 ) 경로 [I] [J] = 0 ;
                 다른 { 
                    경로 [I] [J] = 경로 [I-1.] [J] + 경로 [I] [J- 1이다. ]; 
                } 
            }
        }
        리턴 경로 [렌-1] [WID-1 ]; 
    }

 

 

추천

출처www.cnblogs.com/yingying7/p/11230929.html