Java:实现杨辉三角

目录

思路

完整代码


思路

可以把杨辉三角看作是一个直角三角形,这样可以方便进行输出

以直角三角形中 i行j列 的3为例,我们可以推出: [ i ] [ j ] = [ i -1] [ j ] + [ i - 1] [ j -1] 。

同时,杨辉三角也可以看作是一个二维数组,元素都放在这个二维数组中。关于这个二维数组,我们可以通过List方法来实现。

java 复制代码
public static List<List<Integer>> generate(int numRows) {

} 

List<List<Integer>> 可以通过下面这张图来理解

List是一个一维数组,其中的每个元素可以看作是另一个一维数组。

接下来的思路是可以先把第一行的 1 单独写出来,这样我们就直接从第二行开始。

本题的难点便在于如何实现第二行往后的规律,其中又可以分为三个步骤

  1. 处理第一个元素
  2. 处理中间元素
  3. 处理最后一个元素

由于第一个元素和最后一个元素都是1,所以可以采取直接加的方式来进行。而中间元素可以通过上面提到的:**[ i ] [ j ] = [ i -1] [ j ] + [ i - 1] [ j -1]**来实现。

完整代码

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<>();
        List<Integer> list0 = new ArrayList<>();
        list0.add(1);
        ret.add(list0);
        //从第二行开始
        for (int i = 1; i < numRows; i++) {
            //处理第一个元素
            List<Integer> curRow = new ArrayList<>();
            curRow.add(1);
            //中间元素
            List<Integer> preRow = ret.get(i - 1);
            for (int j = 1; j < i; j++) {
                int val1 = preRow.get(j);
                int val2 = preRow.get(j - 1);
                curRow.add(val1 + val2);
            }
            //最后一个元素
            curRow.add(1);
            ret.add(curRow);
        }
        return ret;
    }

    public static void main(String[] args) {
        List<List<Integer>> ret = generate(4);
        for (int i = 0; i < ret.size(); i++) {
            for (int j = 0; j < ret.get(i).size(); j++) {
                System.out.print(ret.get(i).get(j) + " ");
            }
            System.out.println();
        }
    }
}

有问题的地方可以通过调试的方式来对应解决,调试部分可以看:Java刷题:移除数组中与k值相等的元素-CSDN博客

相关推荐
Swift社区3 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht3 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht3 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20243 小时前
Swift 数组
开发语言
吾日三省吾码4 小时前
JVM 性能调优
java
stm 学习ing4 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc5 小时前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐5 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi776 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器