题目
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
我的代码
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> firstline = new ArrayList();
firstline.add(1);
if (rowIndex == 0) {return firstline;}
List <Integer> secondline = new ArrayList();
secondline.add(1);
secondline.add(1);
if (rowIndex == 1) {return secondline;}
List<Integer> lastturn = secondline;
for (int i=2; i<=rowIndex; i++){
List<Integer> thisturn = new ArrayList();
thisturn.add(1);
for (int j=1; j<lastturn.size(); j++){
thisturn.add(lastturn.get(j-1) + lastturn.get(j));
}
thisturn.add(1);
lastturn = thisturn;
}
return lastturn;
}
}
小结
首先要承认,这里回去抄了杨辉三角1的代码。并回忆起了,写1的时候,我本想直接计算每一行(用组合数),然后被计算阶层卡住,没想到又一次遇到了,我还是不能很好地处理阶层问题,这次一定要好好学一学。
他人代码
class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> list = new ArrayList<>(rowIndex + 1);
long s = 1;
for(int i = 0; i <= rowIndex; i++){
list.add((int)s);
s = s * (rowIndex - i) / (i + 1);
}
return list;
}
}
按照组合数公式,第i个数(从0开始)是
C
r
o
w
I
n
d
e
x
+
1
i
=
(
r
o
w
I
n
d
e
x
+
1
)
!
i
!
∗
(
r
o
w
I
n
d
e
x
+
1
−
i
)
!
C_{rowIndex+1}^{i}=\frac{(rowIndex+1)!}{i!*(rowIndex+1-i)!}
CrowIndex+1i=i!∗(rowIndex+1−i)!(rowIndex+1)!(因为rowIndex从0开始数)
那么,第i+1个数是
C
r
o
w
I
n
d
e
x
+
1
i
+
1
=
(
r
o
w
I
n
d
e
x
+
1
)
!
(
i
+
1
)
!
∗
(
r
o
w
I
n
d
e
x
−
i
)
!
C_{rowIndex+1}^{i+1}=\frac{(rowIndex+1)!}{(i+1)!*(rowIndex-i)!}
CrowIndex+1i+1=(i+1)!∗(rowIndex−i)!(rowIndex+1)!
两者相差
r
o
w
I
n
d
e
x
−
i
i
+
1
\frac{rowIndex-i}{i+1}
i+1rowIndex−i
也就是大佬的代码的意思了。
十分受教!