題目
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]
]
解題思路
對于每一行,先找到前一半的數,右半邊的數可以根據左右對稱得到
對于每一行,有如下規律,
- 對于第row行,有row+1個數
- 第1個數triangele[row][0]為1
- 第i個數(i < row/2 + 1), 等于triangle[row-1][i-1] + triangle[row-1][i]
- 剩余的row/2個數( row/2 < i < row ), 可以根據左邊的數得到
代碼
func generate(numRows int) [][]int {
var triangle [][]int
if 0 == numRows {
return triangle
}
triangle = append(triangle, []int{1})
if 1 == numRows {
return triangle
}
i := 1
for ; i < numRows; i++ {
var row []int
row = append(row, 1)
j := 1
for ; j < i/2 + 1; j++ {
tmp := triangle[i-1][j-1] + triangle[i-1][j]
row = append(row, tmp)
}
j = (i-1)/2
for ; j >=0; j-- {
row = append(row, row[j])
}
fmt.Printf("row:%+v", row)
triangle = append(triangle, row)
}
return triangle
}