簡介
- 楊輝三角
是一道簡單題,可以通過類似一層推下一層的方式進行計算,但是好像看過一個題解, 採用的方式是組合數。本來想採用組合數,嘗試了double溢出
嘗試了long 溢出,嘗試了BigDecimal leetcode 不識別,無奈之下嘗試使用數組的方式並進行延遲計算的方式;
code
class Solution {
public ArrayList<Integer> factorial(Integer index) {
if(index == 0) return new ArrayList<>(){{add(1);}};
ArrayList<Integer> sum = new ArrayList<>();
for(int i=1; i<=index; i++){
sum.add(i);
}
return sum;
}
public long combination(Integer index, Integer num) {
ArrayList<Integer> r = factorial(num);
ArrayList<Integer> a = factorial(index > (num - index) ? index : num - index);
ArrayList<Integer> t = factorial(index > (num - index) ? num - index : index);
for (int i = 1; i < a.size(); i++) {
if(r.get(i) == a.get(i)) {
r.set(i, 1);
}
}
long sum = 1;
for (int i = 0; i < r.size(); i++) {
sum *= r.get(i);
}
for (int i = 1; i < t.size(); i++) {
sum /= t.get(i);
}
return sum;
}
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> rlt = new ArrayList<>();
for(int i=0; i<numRows; i++){
List<Integer> row = new ArrayList<>();
for(int j=0; j<= i; j++){
long a = combination(j,i);
row.add((int)a);
}
rlt.add(row);
}
return rlt;
}
}