Leetcode-pascals-triangle

来源:互联网 发布:wto数据库 编辑:程序博客网 时间:2024/06/06 01:16

题目描述


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]]

杨辉三角问题,我的想法简单直接(好像一直都是),取出上一个计算结果的最后一个元素,计算出现新加入的list,连同之前的结果一起加入到最终的结果中。

于是洋洋洒洒有了如下代码:

import java.util.*;public class Solution {    public ArrayList<ArrayList<Integer>> generate(int numRows) {        ArrayList<ArrayList<Integer>>  res = new ArrayList<ArrayList<Integer>> ();        if(numRows == 0)            return res;        if(numRows == 1){            ArrayList<Integer> list = new ArrayList<Integer>();            list.add(1);            res.add(list);            return res;        }        ArrayList<ArrayList<Integer>> pre = generate(numRows-1);        ArrayList<Integer> temp = pre.get(pre.size()-1);        temp.add(1);        for(int i=0; i<temp.size()-1; i++) {            temp.add(temp.get(i)+temp.get(i+1));        }        temp.add(1);        for(int i=0; i<pre.size(); i++){            res.add(pre.get(i));        }        res.add(temp);        return res;    }}
一运行:

尴尬窒息。

于是我看了通过最好的一位同学的代码:

import java.util.ArrayList;public class Solution {    public ArrayList<ArrayList<Integer>> generate(int numRows) {        ArrayList<ArrayList<Integer>> triangle=new ArrayList<ArrayList<Integer>>();                 if(numRows <= 0) return triangle;                 for(int i=0;i<numRows;i++){            ArrayList<Integer> currentLevel = new ArrayList<Integer>();            currentLevel.add(1);//每一层第一位            if(i>0){                //根据上一层宽度进行循环,由于本层两端的数字已经定下为1,所以本层需要计算的次数=上层宽度-1                for(int j=0;j<triangle.get(i-1).size()-1;j++){                    currentLevel.add(triangle.get(i-1).get(j)+triangle.get(i-1).get(j+1));                }                currentLevel.add(1);//每一层最后一位            }            triangle.add(currentLevel);        }        return triangle;    }}
我发现了,我是没做一次,就生成了一个ArrayList,这是不对的,应该就只能有一个arraylist。

0 0
原创粉丝点击