描述
Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle.
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行
例子
思路
方法1:
每一行除去头尾,其值为肩上的相加
方法2:
第4行为 1 3 3 1
第5行为 1 4 6 4 1
答案
- python
import numpy as np
class Solution:
def generate(self, n: int) -> List[List[int]]:
# 方法1
# for i in range(1,n+1):#1~n行
# t=[1]*i
# for j in range(i):
# if j==0 or j==i-1:
# continue
# t[j]=zong[i-2][j-1]+zong[i-2][j]
# zong.append(t)
# 方法2
zong=[[1]]
for i in range(1,n): #略过n==1时
tt = zong[i-1]
zong.append(list(map(lambda x,y:x+y,[0]+tt,tt+[0])))
return zong[:n] # [:n] == if n==0: return []
- java
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public List<List<Integer>> generate(int n) {
List<List<Integer>> zong = new ArrayList<List<Integer>>();
if (n ==0)
return zong;
zong.add(new ArrayList<Integer>());//n==1时
zong.get(0).add(1);//类似arr[0][0]=1
for (int i=1; i<n; i++)//n==2~n,也即下标1~n-1
{
List<Integer> pre = zong.get(i-1);
List<Integer> now = new ArrayList<Integer>();
//i为行下标,j为列下标,j=0~i 抛去最后一个和第一个
now.add(1);
for (int j=1; j<i; j++)
now.add(pre.get(j-1)+pre.get(j));
now.add(1);
zong.add(now);
}
return zong;
}
}
//
class Solution {
public List<List<Integer>> generate(int rows) {
List<List<Integer>> list = new ArrayList<>();
if(rows==0) return list;
List<Integer> a=new ArrayList<>();
a.add(1);
list.add(a);
for(int i=1; i<rows; i++) {
int n=i+1;
List<Integer> temp_list = new ArrayList<>();
for(int j=0; j<n; j++) temp_list.add(1);
for(int j=1; j<n-1; j++) temp_list.set(j,list.get(i-1).get(j-1)+list.get(i-1).get(j));
list.add(temp_list);
}
return list;
}
}
- c++
class Solution {
public:
vector<vector<int>> generate(int n) {
vector<vector<int>> arr;
if (n==0)
return arr;
arr.push_back(vector<int>(1,1));//[[1]]
for (int i=1; i<n; i++)//i为行下标,行数为i+1
{
vector<int> pre = arr[i-1];
vector<int> now(i+1,1);//初始化该行全为1,目的时下标0和下标i为1
for (int j=1; j<i; j++)
now[j]=pre[j-1]+pre[j];
arr.push_back(now);
}
return arr;
}
};