杨辉三角AyyayList实现

在「杨辉三角」中,每个数是它左上方和右上方的数的和。
设计思路根据上一次的杨辉数组推算出下一层

  1
0+1  1+0

不难知道1被加了两次,并且从第二层开始左右两边始终为1

设计主要循环有以下几点:

第一次不会进入推算循环,直接赋值1
第二层开始最后一个元素不进行计算,因为推算逻辑是【下标】+【下标+1】防止越界
达到除第一层外,首个元素和末尾元素都赋值为1,也就是说实际推算输入元素是该层元素-2

代码:

//-------------------------------------「杨辉三角」
    //在「杨辉三角」中,每个数是它左上方和右上方的数的和。
    public List<List<Integer>> generate(int numRows) {
    List<List<Integer>> list =new ArrayList<>();
        /*
        观察题目可以知道改题返回类型为 List<List<Integer>>
        那么我们需要建立一个循环每次把List<Integer>插入进去
        并且这个List<Integer>是每次需要修改的杨辉三角的层 顺序表
         */
        //这个用列记录上一层的杨辉三角数组
     List<Integer> l1 =new ArrayList<>();

     //循环的建立
        for (int i = 0; i < numRows; i++) {
        //定义插入的的顺序表
        List<Integer> l2 =new ArrayList<>();
        //循环中执行次数是数组长度
           for (int j = 0; j < l1.size(); j++) {
            //根据杨辉三角的规律 第一个为1 只要是第一个就插入1
            if(j==0){
                l2.add(1);
            }
            //不是末尾元素进行杨辉三角变换
            if (j<l1.size()-1) {
                //根据上一层进行推算
                l2.add(l1.get(j)+l1.get(j+1));
            }

        }
        //为了防止越界错误,我们把最后一个数放在循环后面更加高效
        l2.add(1);
           //对于这一层的数组存入l1方便下一层的推算
        l1=l2;

        //将l2存入List中
        list.add(l2);
    }

    return list;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值