Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.java
给定一个非负整数 *numRows,*生成杨辉三角的前 numRows 行。python
In Pascal's triangle, each number is the sum of the two numbers directly above it.数组
在杨辉三角中,每一个数是它左上方和右上方的数的和。数据结构
Example:app
Input: 5 Output: [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
第一行第二行都是1,每行第一个和最后一个都为1,假设其余位置的数x索引坐标是(m,n),则x就是数是它 索引正上方的数和索引正上方的左边的数 之和。即(m-1,n),(m-1,n-1)两数和。code
class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> triangle = new ArrayList<List<Integer>>(); if(numRows == 0) return triangle; List<Integer> one = new ArrayList<Integer>(); one.add(1); triangle.add(one); if(numRows == 1) return triangle; for (int i=1;i<numRows;i++){ List<Integer> row = new ArrayList<Integer>(); row.add(1); for (int j=1;j<i;j++){ List<Integer> prev = triangle.get(i-1); row.add(prev.get(j-1)+prev.get(j)); } row.add(1); triangle.add(row); } return triangle; } }
class Solution: def generate(self, numRows: int) -> List[List[int]]: if numRows==0:return [] triangle=[[1]] if numRows==1: return triangle for i in range(1,numRows): tmp=[1] for j in range(1,i): tmp.append(triangle[i-1][j-1]+triangle[i-1][j]) tmp.append(1) triangle.append(tmp) return triangle
很简单的一道题,能够复习一下java嵌套数组数据结构。另外 能够在内层循环加判断 if(i!=0) row.add(1);triangle.add(row);
在i不等于0时才加上1,这样可省略blog
List<Integer> one = new ArrayList<Integer>(); one.add(1); triangle.add(one); if(numRows == 1) return triangle;
代码段,可是这个 if(i!=0)
会在每次进入第一次循环后判断一次。本着减小资源消耗的原则,应当提到外面。索引