Leetcode Note: Go - Pascals Triangle
Pascal’s Triangle - LeetCode
https://leetcode.com/problems/pascals-triangle/
- Go 言語で取り組んだメモ
所感
- パスカルの三角形
- 公式解読すれば実装に落とし込めそうな気がする
実装準備
func generate(numRows int) [][]int {
return [][]int{}
}
func main() {
numRows := 5
fmt.Println(generate(numRows))
}
回答
0ms, 2MB, Golang Solution Easy to Understand - LeetCode Discuss
https://leetcode.com/problems/pascals-triangle/discuss/1878753/0ms-2MB-Golang-Solution-Easy-to-Understand
func generate(numRows int) [][]int {
triangle := [][]int{}
// numRows 分のループ
for i := 0; i < numRows; i++ {
// ループカウンター +1 分のループ
for j := 0; j < i+1; j++ {
// 各行の初回に 1 をセットする
if j == 0 {
triangle = append(triangle, []int{1})
// 各行の初回以外
} else {
// 各行の終端に 1 をセット
if j == i {
triangle[i] = append(triangle[i], 1)
// 各行の中心部分
} else {
// triangle[i-1][j] + triangle[i-1][j-1]
// triangle[i-1][j] => 前行の j
// triangle[i-1][j-1] => 前行の j-1
// これで前行の 2要素 を加算した結果を算出して代入する
triangle[i] = append(triangle[i], triangle[i-1][j] + triangle[i-1][j-1])
}
}
}
}
return triangle
}
- 実装すべきことの全体像はつかめていたが、実装に落とし込むまでは出来なかった
- ループ処理の具体的な実装イメージが不足していた感
- 今回の処理では、各行の初回・終端・中心に分けて考える必要があり、このあたりの意識があれば実装できた気がする