• 【LEETCODE】33、LeetCode的Given a non-negative integer numRows, generate the first numRows of Pascal's triangle


    package y2019.Algorithm.array;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @ProjectName: cutter-point
     * @Package: y2019.Algorithm.array
     * @ClassName: Generate
     * @Author: xiaof
     * @Description: Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
     * Input: 5
     * Output:
     * [
     *      [1],
     *     [1,1],
     *    [1,2,1],
     *   [1,3,3,1],
     *  [1,4,6,4,1]
     * ]
     *
     * 如果不是第一个数据和最后一个数据,那么中间的数据求值方式
     * a[i,j] = a[i - 1][j-1] + a[i - 1][j]
     *
     * @Date: 2019/7/1 17:31
     * @Version: 1.0
     */
    public class Generate {
    
        //这个效率0ms,已经差不多最快了
        public List<List<Integer>> solution(int numRows) {
    
            List<List<Integer>> result = new ArrayList<List<Integer>>();
    
            //如果一行都没有,直接反馈空
            if(numRows <= 0) {
                return result;
            }
    
            //遍历生成每一行数据
            for(int i = 0; i < numRows; ++i) {
                //a[i,j] = a[i - 1][j-1] + a[i - 1][j]
                List row = new ArrayList();
                for(int j = 0; j < i + 1; ++j) {
                    //求出每一行的数据
                    if(j == 0 || j == i) {
                        row.add(1);
                    } else {
                        row.add(result.get(i - 1).get(j - 1) + result.get(i - 1).get(j));
                    }
                }
                result.add(row);
            }
    
            return result;
        }
    
        //大牛答案,内存占用最低,差别再那?
        public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> res = new ArrayList<>();
            if(numRows==0){
                return res;
            }
            //这里吧row定义再外面
            List<Integer> temp = new ArrayList<>();
            temp.add(1);
            res.add(temp);
            for (int i = 2; i <= numRows; i++) {
                try {
                    temp=res.get(i-2);
                }catch (Exception e){
                    System.out.println("i = " + i);
                }
                //但是这里还是定义了row数据
                List<Integer>x=new ArrayList<>();
                //也许关键就是这个位置了,再外面+1,少一次循环
                x.add(1);
    
                for(int j=0;j<temp.size()-1;j++){
                    x.add(temp.get(j)+temp.get(j+1));
                }
                x.add(1);
                res.add(x);
            }
            return res;
        }
    
    
    }
  • 相关阅读:
    oracle操作小常识
    Report Machine
    ReportMachine
    如何创建Asp.net MVC ViewModel
    Page Scroll Menu (页面中锚点菜单)
    EF selection expression 与 Linq备忘
    chrome 浏览器 开发者工具 性能检测 参数解释
    IE 兼容性写法
    Asp.net MVC Bundle 的使用与扩展
    ASP.NET MVC 性能优化总结
  • 原文地址:https://www.cnblogs.com/cutter-point/p/11119400.html
Copyright © 2020-2023  润新知