LeetCode118 杨辉三角形

2024-03-19 00:20
文章标签 杨辉三角 leetcode118

本文主要是介绍LeetCode118 杨辉三角形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 题目
    给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
    在「杨辉三角」中,每个数是它左上方和右上方的数的和。

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

  3. 解题思路
    1. 方法一:暴力算法
      1. 根据杨辉三角形定义,每一个元素都是其左上方和右上方之和。为了满足其左上方右上方数值加和,那么可以将整个二维数组填满,这样就可以直接使用获取方两个值加和计算目标元素值。
      2. 那么可以按照规律初始化一个二维数组,默认值=0,第一行中间位置是1,遍历数组依次算出每一个元素的值。
      3. 其中每一行的第  总行数numRows - 第i行  个元素即每一行的起始有效值位置(非0位置),第 每一行总元素个数 - 总行数 + 第i行  个元素即每一行的终止有效位置。
    2. 方法二:暴力算法优化
      1. 优化方法一,不必创建多余0值元素,减少内存、遍历次数。
      2. 根据规律,每一行的起始值和终止值都是1,中间段内按照规律,上方量元素值之和。即每一行元素即numRows个,下标=0或下标=numRows - 1时,值为1。
      3. 原始杨辉三角习惯是按照元素依次错开计算下一个值,那么将每一行每一列按照从左到右对其,可以发现,目标元素的值就是其左上方的值+上方的值。
    3. 方法三:数学公式推到(参考官方题解-方法二)
      1. 依次计算第i行的排列结果。

  4. 代码(Java)
    // 方法一
    class Solution {public List<List<Integer>> generate(int numRows) {if (numRows == 0) {return new ArrayList();}List<List<Integer>> result = new ArrayList<>();List<Integer> temp = new ArrayList<>();int[][] res = new int[numRows][2 * numRows + 1];res[0][numRows] = 1;temp.add(res[0][numRows]);result.add(temp);for (int i = 1; i < numRows; i++) {temp = new ArrayList<>();for (int j = numRows - i; j < res[i].length - numRows + i; j++) {res[i][j] = res[i - 1][j + 1] + res[i - 1][j - 1];if (res[i][j] != 0) {temp.add(res[i][j]);}}result.add(temp);}return result;}
    }
    // 方法二 
    class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<List<Integer>>();for (int i = 0; i < numRows; ++i) {List<Integer> row = new ArrayList<Integer>();for (int j = 0; j <= i; ++j) {if (j == 0 || j == i) {row.add(1);} else {row.add(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));}}ret.add(row);}return ret;}}
    // 方法三
    class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<List<Integer>>();for (int i = numRows - 1; i >= 0; i--) {List<Integer> ans = new ArrayList<>();ans.add(1);int n = 0;long r = 1;while (n < i) {r = r * (i - n) / (n + 1);ans.add((int) r);n++;}ret.add(0, ans);}return ret;}
    }

这篇关于LeetCode118 杨辉三角形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824187

相关文章

c语言——用一维数组输出杨辉三角形

一.代码 #include <stdio.h>int Num[100];int Hang;int Lie;int a;int Flag;int main() {Lie = 1;Hang = 1;a = 0;while (1) {//列1为1if (Lie == 1) {Num[1] = 1;Lie++;}//数据存到数组里面while (Hang >= Lie && Hang !=

C140 杨辉三角

C140 杨辉三角 题目题解(94)讨论(102)排行面经 new 简单  通过率:29.57%  时间限制:1秒  空间限制:256M 知识点C++工程师牛客  校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上

Python 杨辉三角 生成器

# -*- coding: utf-8 -*-# 杨辉三角"""列表生成式直接占用空间,generator一边循环一边计算的机制,存储一个算法,可以通过for循环迭代调用generator不能使用列表生成式可以通过函数实现,含有yield关键字则为生成器普通函数返回一个结果,按照顺序执行生成器函数返回的是一个生成器对象,每次调用next()的时候执行,遇到yield语句返回,再次执行时

跟LintCode的算法题杠上了(2424输出杨辉三角)

题目 你的代码需要从标准输入流(控制台)中读入一个正整数 n,然后计算出前 n 行的杨辉三角并将结果打印到标准输出流(控制台)中。 样例 评测机会将整个项目的代码编译为一个可执行的 Main 程序,并按照这样的方式执行你的代码 Main。你的代码需要从标准输入流(控制台)中读入数据 n,并将前 n 行的杨辉三角打印到标准输出流(控制台)中。输出格式见样例。 样例一 * 你的代码需要从标准

JAVA学习-练习试用Java实现“杨辉三角 II”

问题: 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex = 3 输出: [1,3,3,1] 示例 2: 输入: rowIndex = 0 输出: [1] 示例 3: 输入: rowIndex = 1 输出: [1,1] 提示: 0 <= rowIndex <=

列表求杨辉三角

利用列表可变,有序,可追加的特性来求杨辉三角。 (1):列表嵌套列表 n = 6triangle = [[1], [1, 1]]for i in range(2, n):pre = triangle[i-1]cur = [1] * (i+1)for j in range(i-1):cur[j+1] = pre[j] + pre[j+1]triangle.append(cur)print(

LeetCode 算法:杨辉三角 c++

原题链接🔗:杨辉三角难度:简单⭐️ 题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows = 1 输出: [[1]] 提示:

【蓝桥杯省赛真题47】python杨辉三角形计算 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python杨辉三角形计算 一、题目要求 1、题目描述 2、编程实现 3、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python杨辉三角形计算 第十四届蓝桥杯青少年组python比赛省赛真题 一、题目要求 (注:input()输入函数的括号中不允许

【数学题-递推找规律】BNU 4225 杨辉三角形

【题目链接】click here~~ 【题目大意】 LZM 同学比较牛, Lsy 最近也越来越生猛,他们思路快,代码速度神勇。近期惊闻此二人均要参加校赛,队里决定出些题目卡他们,因为他们的罢工给题目组留下了繁重的负担……(报复报复) 于是, XsugarX 瞄准了 LZM 不太喜欢看的数学题目以及 Lsy 猜公式的喜好,奸笑中( ^.^ )。这个数学问题是个比较古老的问题,有如下

JAVA之利用数组输出杨辉三角形

package test;public class Demo1 {public static void main(String[] args) {int num[][]=new int[10][10],i,j;for(i=0;i<num.length;i++)//设i从第0行开始,下面的j可以理解为列{num[i]=new int[i+1];for(j=0;j<=i;j++){if(i==0||