zoukankan      html  css  js  c++  java
  • Pascal's Triangle

    问题描述

    Given numRows, generate the first numRows of Pascal's triangle.

    For example, given numRows = 5,

    Return

    [
         [1],
        [1,1],
       [1,2,1],
      [1,3,3,1],
     [1,4,6,4,1]
    ]
    

    解决思路

    初始条件 + 循环控制。

    程序

    public class Solution {
        public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> res = new ArrayList<List<Integer>>();
            if (numRows <= 0) {
                return res;
            }
            
            List<Integer> list = new ArrayList<Integer>();
            list.add(1);
            res.add(list);
            if (numRows == 1) {
                return res;
            }
            
            list = new ArrayList<Integer>();
            list.add(1);
            list.add(1);
            res.add(list);
            if (numRows == 2) {
                return res;
            }
            
            for (int i = 2; i < numRows; i++) {
                List<Integer> tmp = res.get(i - 1);
                List<Integer> add = new ArrayList<Integer>();
                add.add(1);
                for (int j = 0; j < i - 1; j++) {
                    add.add(tmp.get(j) + tmp.get(j + 1));
                }
                add.add(1);
                res.add(add);
            }
            
            return res;
        }
    }
    

    Follow up

    Given an index k, return the kth row of the Pascal's triangle.

    For example, given k = 3,
    Return [1,3,3,1].

    Note:
    Could you optimize your algorithm to use only O(k) extra space? 

    解决思路

    辅助的中间list存上一个list的结果。交替进行。

    程序

    public class Solution {
        public List<Integer> getRow(int rowIndex) {
            List<Integer> row = new ArrayList<Integer>();
            if (rowIndex < 0) {
                return row;
            }
            
            row.add(1);
            if (rowIndex == 0) {
                return row;
            }
            
            row.add(1);
            if (rowIndex == 1) {
                return row;
            }
            
            List<Integer> tmp = new ArrayList<Integer>(row);
            int i = 2;
            
            while (i <= rowIndex) {
                int mids = i - 1;
                row = new ArrayList<Integer>();
                row.add(1);
                for (int j = 0; j < mids; j++) {
                    row.add(tmp.get(j) + tmp.get(j + 1));
                }
                row.add(1);
                tmp = new ArrayList<Integer>(row);
                ++i;
            }
            
            return row;
        }
    }
    

      

  • 相关阅读:
    软件测试面试题及答案【史上最全】
    Loadrunner参数(摘)
    Linux系统的目录结构
    关于梦想(七)
    Mysql基于Linux上的安装
    走进MySQL
    关于梦想(六)
    Jmeter的实例应用
    十种社会中最真实的人际关系
    有些人走了就走了,该在的还在就好
  • 原文地址:https://www.cnblogs.com/harrygogo/p/4672404.html
Copyright © 2011-2022 走看看