java动态规划解答
注意:给的是嵌套列表,拿取元素要用get()方法,获取长度应该用size()方法
class Solution {
public int minimumTotal ( List< List< Integer> > triangle) {
int n= triangle. size ( ) - 1 ;
int m= n+ 1 ;
int [ ] [ ] dp= new int [ n+ 1 ] [ m+ 1 ] ;
dp[ 0 ] [ 0 ] = triangle. get ( 0 ) . get ( 0 ) ;
for ( int i= 1 ; i<= n; i++ ) {
for ( int j= 0 ; j<= i; j++ ) {
if ( j== 0 ) {
dp[ i] [ j] = triangle. get ( i) . get ( j) + dp[ i- 1 ] [ j] ;
} else if ( j== i) {
dp[ i] [ j] = triangle. get ( i) . get ( j) + dp[ i- 1 ] [ j- 1 ] ;
} else {
dp[ i] [ j] = Math. min ( triangle. get ( i) . get ( j) + dp[ i- 1 ] [ j] , triangle. get ( i) . get ( j) + dp[ i- 1 ] [ j- 1 ] ) ;
}
}
}
int min= dp[ n] [ 0 ] ;
for ( int i= 0 ; i< m; i++ ) {
if ( min> dp[ n] [ i] ) {
min= dp[ n] [ i] ;
}
}
return min;
}
}
嵌套list
package bao1;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class CE1 {
public static void main(String[] args) {
List<List<Integer>>list=new LinkedList<>();
List<Integer>list1=new ArrayList<Integer>();
List<Integer>list2=new ArrayList<Integer>();
List<Integer>list3=new ArrayList<Integer>();
list1.add(1);
list2.add(2);
list2.add(22);
list3.add(3);
list3.add(33);
list3.add(333);
list.add(list1);
list.add(list2);
list.add(list3);
System.out.println(list); // [[1], [2, 22], [3, 33, 333]]
//错误的,需要的是变量,但是找到的是指,只能赋值给变量
//list.get(1).get(1)=list.get(1).get(1)+list.get(0).get(0);
System.out.println(list.size()); //3
System.out.println(list.get(1).size()); //2
System.out.println(list.get(2).size()); //3
}
}