leetcode 杨辉三角 II

pascals-triangle-ii
方法 1

func getRow1(rowIndex int) []int {
	rowIndex += 1

	var res [][]int
	for i := 0; i < rowIndex; i++ {
		r := make([]int, 0)
		for j := 0; j < i+1; j++ {
			if j == 0 || j == i {
				r = append(r, 1)
			} else {
				r = append(r, res[i-1][j]+res[i-1][j-1])
			}
		}
		res = append(res, r)
	}
	return res[len(res)-1]
}

方法 1 说白了就是在杨辉三角 1 的解决方法上返回最后的元素。和杨辉三角 1 相比没有任何优化。这里需要注意的是杨辉三角 2 起始行是从第 0 行开始的。推荐使用方法 2 简洁方便。


方法 2

func getRow2(rowIndex int) []int {
	rowIndex+=1
	res := make([]int, rowIndex)
	for i := 0; i < rowIndex; i++ {
		res[i] = 1
		for j := i - 1; j > 0; j-- {
			res[j] += res[j-1]
		}
	}
	return res
}

需要注意内层循环
假设 rowIndex = 5

第一次循环:i = 0,[1 0 0 0 0 0],内层循环条件不满足。
第二次循环:i = 1,[1 1 0 0 0 0],内层循环条件不满足。
第三次循环:i = 2,[1 1 1 0 0 0],内层循环条件满足,第一次循环,res[1] = 2,[1 2 1 0 0 0] 然后退出。
第四次循环:i = 3,[1 2 1 1 0 0],
内层循环条件满足,第一次循环,res[2] = 3,[1 2 3 1 0 0],第二次循环 res[1] = 3,[1 3 3 1 0 0] 然后退出。
第五次循环:i = 4,[1 3 3 1 1 0],
内层循环条件满足,第一次循环,res[3] = 4,[1 3 3 4 1 0],第二次循环 res[2] = 6,[1 3 6 4 1 0],第三次循环 res[1] = 4,[1 4 6 4 1 0] 然后退出。
第六次循环:i = 5,[1 4 6 4 1 1],
内层循环条件满足,第一次循环,res[4] = 5,[1 4 6 4 5 1],第二次循环 res[3] = 10,[1 4 6 10 5 1],第三次循环 res[2] = 10,[1 4 10 10 5 1],第四次循环 res[1] = 5,[1 5 10 10 5 1]

最终返回数组 [1 5 10 10 5 1] 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值