panic:运行时错误:索引超出范围[-1]



当我试图解决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似乎是合理的。我不知道你为什么要更改它。

相关内容

  • 没有找到相关文章

最新更新