LeetCode 杨辉三角II

版权声明:欢迎提问:[email protected] https://blog.csdn.net/include_heqile/article/details/82557277

我的解决方案:比较懒,直接使用了上一题的代码

class Solution {
    public List<Integer> generate(int numRows) {
        List<List<Integer>> outter=new ArrayList<List<Integer>>();
        ArrayList<Integer> inner = new ArrayList<Integer>(); 
        inner.add(1);
        outter.add(inner);
        int outterIndex=0;
        while(outter.size()!=numRows+1) {
            ArrayList<Integer> lastLevel = (ArrayList<Integer>) outter.get(outterIndex);
            ArrayList<Integer> tmp = new ArrayList<Integer>();
            for(int i=0;i<lastLevel.size()+1;i++) {
                int left=i>0?lastLevel.get(i-1):0;
                int right=i<lastLevel.size()?lastLevel.get(i):0;
                int res=left+right;
                tmp.add(res);
            }
            outter.add(tmp);
            outterIndex++;
        }
        return outter.get(outter.size()-1); 
    } 

    public List<Integer> getRow(int rowIndex) {
        return generate(rowIndex);
    }
}

提交记录中执行耗时最短的代码:这个解法使用了杨辉三角的一个特性:

第n行的第1个数为1,第二个数为1×(n-1),第三个数为1 × (n-1) × (n-2) / 2,第四个数为1 × (n-1) × (n-2) / 2 × (n-3) / 3…依此类推。

其实就是前一个数作为后一个数乘式的被乘数,乘数是rowIndex-index+1,除式中的除数就是index-1

class Solution {
    public List<Integer> getRow(int rowIndex) {
        rowIndex+=1;
        List<Integer> ret = new LinkedList<Integer>();
        long nk = 1;
        ret.add((int)nk);
        for (int i = 2; i <= rowIndex; i++) {
            nk = nk * (rowIndex - i + 1) / (i - 1);
            ret.add((int)nk);
        } 
        return ret;
    }
}

猜你喜欢

转载自blog.csdn.net/include_heqile/article/details/82557277