118. Pascal's Triangle
翻譯:給定行數,生成Pascal三角的第一行?(應該是所有行,不止第一行)
Given numRows, generate the first numRows of Pascal‘s triangle.
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
大神代碼(rheaxu)
public class Solution {
public List<List<Integer>> generate(int numRows)
{
List<List<Integer>> allrows = new ArrayList<List<Integer>>();//1.泛型,<>中的內容是指定該數組中存的類型,如這句,意為該數組中每個元素都是一個List數組,而且該list數組中每個元素都是Integer。2.多態,List是一個接口,ArrayList是其實現類,可看作子類(不對的話請讀者指正),多態是指父類的引用指向子類對象,也就是List類的引用實際指向ArrayList,而在運行中,會調用子類重寫的父類的方法。具體可查閱多態相關資料。
ArrayList<Integer> row = new ArrayList<Integer>();//1.泛型,該ArrayList數組中存放的元素類型為Integer
for(int i=0;i<numRows;i++)
{
row.add(0, 1);
//add和set的區別 set()是更新,更新指定下標位置的值。
//add()是添加,區別於一般的add(E e),這個就是有個位置的概念,特殊位置之後的數據,依次往後移動就是了。
//在此意思為,將第0位設置為1,其它元素依次往後挪,這也就實現了隨著層數增加,大小增加。
for(int j=1;j<row.size()-1;j++)//只設置中間的內容,等於上一行的對應位置相加,第一位和最後一位不做處理,第一位也就是下標為0的位置已設為1,最後一位是前面推後的,也是1
row.set(j, row.get(j)+row.get(j+1));
allrows.add(new ArrayList<Integer>(row));
}
return allrows;
}
}
我的代碼
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.lang.Integer;
class Solution {
public List<List<Integer>> generate(int numRows) {
Map lists=new HashMap();
for(int i=2;i<numRows;i++){
List<Integer> list = new ArrayList<Integer>();
lists.put(("list"+i),list);
}
List<List<Integer>> List = new ArrayList<List<Integer>>();
if (numRows==0)
return List;
List<Integer> list0 = new ArrayList<Integer>();
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> temp = new ArrayList<Integer>();
list0.add(1);
List.add(list0);
if (numRows==1)
return List;
list1.add(1);
list1.add(1);
List.add(list1);
if (numRows==2)
return List;
for (int i = 2; i < numRows; i++) {
temp=List.get(i-1);
List<Integer> listi =(java.util.List<Integer>) lists.get(("list"+i));
listi.add(1);
for (int j=1;j<i;j++){
listi.add(temp.get(j-1)+temp.get(j));
}
listi.add(1);
List.add(listi);
}
return List;
}
}
118. Pascal's Triangle