日拱算法:解两道“杨辉三角”题

简介: 什么是“杨辉三角”,想必大家并不陌生~~在「杨辉三角」中,每个数是它左上方和右上方的数的和。

image.png

什么是“杨辉三角”,想必大家并不陌生~~

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

image.png


本篇带来两道“杨辉三角”题,小冲一波~~


题1:给定一个非负整数 numRows 生成「杨辉三角」的前 numRows 行。


示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]


解题思路


思路简单,把握杨辉三角特点:第0行1个元素,第1行2个元素,第2行3个元素;依此例推


下一行元素和上一行元素的关系是(0计数开始)以第2行第1列的元素2举例,等于上面1+1(上一行同一列加上一行前一列元素)


JavaScript 实现


/**
 * @param {number} numRows
 * @return {number[][]}
 */
var generate = function (numRows) {
  const res = [];
  /**
   let egg=[
    [1], 
    [1, 1], 
    [1, 2, 1], 
    [1, 3, 3, 1], 
    [1, 4, 6, 4, 1]
  ]
  */
  for (let i = 0; i < numRows; i++) {
    // 看上面的例子数组,第0行1个元素,第1行2个元素,第2行3个元素....
    const row = new Array(i + 1).fill(1);
    // 这里j从1开始到row.length-2结束  是因为每一行的第一个和最后一个其实是不需要算的,因为已经默认为1了,只有中间的才需要算
    for (let j = 1; j < row.length - 1; j++) {
      // 看上面的例子数组,以(0计数开始)2行1列的元素2举例,等于上面1+1(上一行同一列及上一行前一列元素)
      row[j] = res[i - 1][j] + res[i - 1][j - 1];
    }
    res.push(row);
  }
  return res;
};

image.png


题2:给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex **行。

示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]
示例 2:
输入: rowIndex = 0
输出: [1]
示例 3:
输入: rowIndex = 1
输出: [1,1]


解题思路


巧用递归:

  • i表示层级(rowIndex),第i层存在i+1个元素
  • j表示当前层级的元素的位置
  • f[i][j] = (f[i - 1][j - 1] || 0) + (f[i - 1][j] || 0)
/**
 * @param {number} rowIndex
 * @return {number[]}
 */
const getRow = function(rowIndex) {
  /**
   * 递归方程:f[i][j] = (f[i - 1][j - 1] || 0) + (f[i - 1][j] || 0)
   */
  if (rowIndex === 0) {
    return [1];
  }
  const arr = getRow(rowIndex - 1);
  return Array.from({length: rowIndex + 1})
    .map((_, index) => (arr[index - 1] || 0) + (arr[index] || 0));
};
复制代码

image.png


OK,以上便是本篇分享~


相关文章
|
2月前
|
存储 算法 测试技术
ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角
ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角
23 1
|
4月前
|
存储 算法 JavaScript
|
9月前
|
算法 前端开发
阿里前端算法题两道
阿里前端算法题两道
71 0
|
11月前
|
算法
java202303java学习笔记第二十五天-两道算法题1
java202303java学习笔记第二十五天-两道算法题1
56 0
|
12月前
|
分布式计算 算法 大数据
白话Elasticsearch45-深入聚合数据分析之易并行聚合算法,三角选择原则,近似聚合算法
白话Elasticsearch45-深入聚合数据分析之易并行聚合算法,三角选择原则,近似聚合算法
68 0
|
人工智能 算法 C++
[**算法**]关于数字反转的两道例题的分析思考
两个题目看着很像,但是细节不太一样,一个是去处理浮点,(其中有用STL大法的和将小数点前后和小数点分开进行输入的还有利用字符串的读写来处理的)还有一个是去处理整数
112 0
|
机器学习/深度学习 传感器 算法
基于 Bowyer-Watson算法实现delaunay德劳内三角网络和Voronoi泰森多边形的建立附matlab代码
基于 Bowyer-Watson算法实现delaunay德劳内三角网络和Voronoi泰森多边形的建立附matlab代码
|
算法 Go 索引
算法练习第三天——杨辉三角
给定一个非负整数 num, 生成「杨辉三角」的前 num 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
算法练习第三天——杨辉三角