*Triangle

3856 단어 RIA
제목:
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[

     [2],

    [3,4],

   [6,5,7],

  [4,1,8,3]

]


The minimum path sum from top to bottom is  11  (i.e., 2 + 3 + 5 + 1 = 11).
Note:Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
 
문제:
동적 기획의 고전적인 제목밑바닥에서 위로 해답을 구해야 한다.
점차적인 공식은 dp[i][j]=dp[i+1][j]+dp[i+1][j+1]이다. 현재 이 점의 최소값은 그의 아래 줄에 가까운 두 점의 최소값과 현재 점의 값을 더한다.
삼각형이고 역사 데이터는 최소 값을 계산할 때 한 번만 적용되기 때문에 2차원 그룹을 만들 필요가 없다. 1차원 그룹의 값을 업데이트할 때마다 마지막으로 그 값에 저장된 것이 최종 결과이다.
코드는 다음과 같습니다.
 
 1 public int minimumTotal(List<List<Integer>> triangle) {

 2     if(triangle.size()==1)

 3         return triangle.get(0).get(0);

 4         

 5     int[] dp = new int[triangle.size()];

 6 

 7     //initial by last row 

 8     for (int i = 0; i < triangle.get(triangle.size() - 1).size(); i++) {

 9         dp[i] = triangle.get(triangle.size() - 1).get(i);

10     }

11  

12     // iterate from last second row

13     for (int i = triangle.size() - 2; i >= 0; i--) {

14         for (int j = 0; j < triangle.get(i).size(); j++) {

15             dp[j] = Math.min(dp[j], dp[j + 1]) + triangle.get(i).get(j);

16         }

17     }

18  

19     return dp[0];

20 }

 
 
Reference:  http://www.programcreek.com/2013/01/leetcode-triangle-java/
 
 
 
 

좋은 웹페이지 즐겨찾기