当我试图解决118. Pascal's Triangle
的leetcode问题时https://leetcode.com/problems/pascals-triangle/
它出现了一个奇怪的错误。下面的代码可以通过OJ。
func generate(numRows int) [][]int {
res := [][]int{}
for i := 0; i < numRows; i++ {
row := []int{}
for j := 0; j < i+1; j++ {
if j == 0 || j == i {
row = append(row, 1)
} else if i > 1 {
row = append(row, res[i-1][j-1] + res[i-1][j])
}
}
res = append(res, row)
}
return res
}
但我这样写的代码会出现恐慌,但基本逻辑是一样的。
func generate(numRows int) [][]int {
res := [][]int{}
for i := 0; i < numRows; i++ {
row := []int{}
for j := 0; j < i+1; j++ {
if j == 0 || j == i {
row = append(row, 1)
}
if i > 1 {
row = append(row, res[i-1][j-1] + res[i-1][j])
}
}
res = append(res, row)
}
return res
}
我使用了if-else-if结构,它工作得很好,但我使用了2 if条件判断错误。
其实,他们的逻辑是一样的,但为什么会出错呢?如果你能解决这个问题,我将不胜感激。祝你好运!
问题是在第二个版本中使用了2个if
条件,而在第一个版本中则使用了一个if else
条件。
但基本逻辑与相同
不,逻辑不一样。结果是,当j
为0时,您尝试执行j-1
。
如果您有2个类似的If条件,如果满足各自的条件,程序将分别进入两个块。
if j == 0 || j == i {
row = append(row, 1)
}
// if j is 0 you still enter this block as long as i > 1
if i > 1 {
row = append(row, res[i-1][j-1] + res[i-1][j])
}
如果满足第一个if
,则可以使用continue
跳过本节。
if j == 0 || j == i {
row = append(row, 1)
// continue with the next iteration
continue
}
if i > 1 {
row = append(row, res[i-1][j-1] + res[i-1][j])
}
也就是说,在代码的第一个版本中使用if else
似乎是合理的。我不知道你为什么要更改它。