标签:直接 width com image 规划 ret OWIN ++ res
这明明是第4行....
一次通过还是美滋滋
说一下思路
因为这种由上面的一列 构成 下一列的结构,肯定是用一个数组保存,然后更新就可以了。
又有,第一个和最后一个都是1,中间的比如i位置,是由上一列的i和i-1加起来的。
那么假如数组里面存的是上一列的值,每次只要更新1~row-1的值就行了。
row-1位置存的是上一列row-1的值,左边是row-2的值,那么只要(row-1)+(row-2),就是当前列row-1的值了
从右边开始算起,能够保证左边的值都用来计算,不受影响,因为需要i和i-1啊,肯定从右边算起。
比如计算第四行,当前的数组是[1,2,1]
因为每行最后一位是1,那么直接在最后添加1 【1,2,1,1】
计算倒数第二个值的时候
【1,2,1】
【1,2,1,1】
其实他现在的值,就是上一列该位置的值,前面的值,就是上一列前面的值。
那么就是【1,2,3,1】
继续
【1,3,3,1】
OK了
所以,只有有上一列的值,就能算出当前列的值,因为最多是34行,那么只要创建34大的数组即可。
至于这个灵感怎么来的,是从背包问题的优化的来的,背包最后也是只使用一行就行。
public static List<Integer> getRow(int rowIndex) { int [] array = new int [34]; array[0]=1; array[1]=1; //要一直算到第row行 for(int i=2;i<=rowIndex;i++){ //对于每一列,从右边开始构造 //最右边是1,第一位是1 array[i]=1; // array[0]=1; //其余的就是该位置原来的数字+前一位的数字 for(int j=i-1;j>0;j--){ array[j] = array[j]+array[j-1]; } } List<Integer> result = new ArrayList<>(); for(int i=0;i<=rowIndex;i++){ result.add(array[i]); } return result; }
LeetCode119-杨辉三角2(题目有Bug,动态规划)
标签:直接 width com image 规划 ret OWIN ++ res
原文地址:https://www.cnblogs.com/weizhibin1996/p/9406284.html