简介

  1. 杨辉三角

是一道简单题,可以通过类似一层推下一层的方式进行计算,但是好像看过一个题解, 采用的方式是组合数。本来想采用组合数,尝试了double溢出
尝试了long 溢出,尝试了BigDecimal leetcode 不识别,无奈之下尝试使用数组的方式并进行延迟计算的方式;

code

class Solution {
    public ArrayList<Integer> factorial(Integer index) {
        if(index == 0) return new ArrayList<>(){{add(1);}};
        ArrayList<Integer>  sum = new ArrayList<>();

        for(int i=1; i<=index; i++){
            sum.add(i);
        }
        return sum;
    }
    public long combination(Integer index, Integer num) {
        ArrayList<Integer> r = factorial(num);
        ArrayList<Integer> a = factorial(index > (num - index) ? index : num - index);
        ArrayList<Integer> t = factorial(index > (num - index) ? num - index : index);
        for (int i = 1; i < a.size(); i++) {
            if(r.get(i) == a.get(i)) {
                r.set(i, 1);
            }
        }

        long sum = 1;
        for (int i = 0; i < r.size(); i++) {
            sum *= r.get(i);
        }
        for (int i = 1; i < t.size(); i++) {
            sum /= t.get(i);
        }
        return sum;
    }
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> rlt = new ArrayList<>();
        for(int i=0; i<numRows; i++){
            List<Integer> row = new ArrayList<>();
            for(int j=0; j<= i; j++){
                long a = combination(j,i);

                row.add((int)a);
            }
            rlt.add(row);
        }
        return rlt;
    }
}
posted on 2022-11-03 23:19  HDU李少帅  阅读(22)  评论(0编辑  收藏  举报