题意:

image.png

解题思路:

  1. 思路: O(n2)
  2. 1. 从上到下依次计算每一行,由于每行的值仅与上一行有关,所以可以采用滚动数组优化;
  3. 2. ans[i & 1][j] = 1 =》 0行存储的是[0,2,4,6,8行],1行存储[1,3,5,7,9]
  4. 3. 计算中间值:$ans[$i & 1][$j] = $ans[$i - 1 & 1][$j - 1] + $ans[$i - 1 & 1][$j];

PHP代码实现:

  1. class Solution {
  2. /**
  3. * @param Integer $n
  4. * @return Integer[]
  5. */
  6. function getRow($n) {
  7. if ($n < 0) return false;
  8. $ans = [];
  9. $ans[0] = [1];
  10. $ans[1] = [1, 1];
  11. for ($i = 2; $i <= $n; $i++) {
  12. for ($j = 0; $j <= $i; $j++) {
  13. if ($j == 0 || $j == $i) {
  14. $ans[$i & 1][$j] = 1;
  15. } else {
  16. $ans[$i & 1][$j] = $ans[$i - 1 & 1][$j - 1] + $ans[$i - 1 & 1][$j];
  17. }
  18. }
  19. }
  20. return $ans[$n & 1];
  21. }
  22. }

GO代码实现:

  1. func getRow(rowIndex int) []int {
  2. result := make([]int, rowIndex + 1)
  3. for i := 0; i <= rowIndex; i++ {
  4. for j := i; j >= 0; j-- {
  5. if j == i || j == 0 {
  6. result[j] = 1
  7. } else {
  8. result[j] += result[j - 1]
  9. }
  10. }
  11. }
  12. return result
  13. }