[leetcode]118,119PascalsTriangle,杨辉三角1,2

杨辉三角1
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 List<List<Integer>> generate(int numRows) {
        List<List<Integer>> res = new ArrayList<>();
        if (numRows < 1)
            return res;
        List<Integer> one = new ArrayList<>();
        one.add(1);
        res.add(one);
        for (int i = 1; i < numRows; i++) {
            List<Integer> cur = new ArrayList<>();
            cur.add(1);
            int num = 1;
            while (num < i)
            {
                cur.add(res.get(i-1).get(num)+res.get(i-1).get(num-1));
                num++;
            }
            cur.add(1);
            res.add(cur);
        }
        return res;
    }

 



杨辉三角2
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?
要求直接输出第K行
由于有空间限制,只能在本地进行构建杨辉三角,内循环用来更新数据,外循环用来记录第几行

public  List<Integer> getRow(int rowIndex) {
        List<Integer> res = new ArrayList<>();
        if(rowIndex<0)
            return res;
        //第一行
        res.add(1);
        for(int i=1;i<=rowIndex;i++)
        {
            //从后边开始向前更新数据,第一个数不更新
            for(int j=res.size()-2;j>=0;j--)
            {
                //当前的数加上前边的数就是下一行的当前位置数
                res.set(j+1,res.get(j)+res.get(j+1));
            }
            //循环完后加上最后的1就是更新好了一行
            res.add(1);
        }
        return res;
    }

 




posted @ 2017-08-15 16:33  stAr_1  阅读(222)  评论(0编辑  收藏  举报