• LeetCode: Pascal's Triangle I && II


    Title:

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

    递归:
    class Solution {
    public:
        vector<vector<int> > results;
        vector<vector<int>> generate(int numRows) {
            if (numRows < 1)
                return results;
            maker(numRows);
            return results;
        }
        
        void maker(int numRows){
            vector<int> cur;
            cur.push_back(1);
            if (numRows == 2){
                maker(numRows-1);
                cur.push_back(1);
            }
            else if (numRows > 2){
                maker(numRows-1);
                vector<int> pre = results[numRows-2];
                for (int i = 0 ; i < pre.size()-1; i++){
                    cur.push_back(pre[i]+pre[i+1]);
                }
                cur.push_back(1);
            }
            results.push_back(cur);
        }
    };

    非递归
    class Solution {
    public:
        vector<vector<int> > results;
        vector<vector<int>> generate(int numRows) {
            if (numRows < 1)
                return results;
            vector<int> result;
            result.push_back(1);
            results.push_back(result);
            for (int i = 2; i <= numRows; i++){
                vector<int> pre = results[i-2];
                vector<int> cur;
                cur.push_back(1);
                for (int j = 0; j < pre.size()-1; j++){
                    cur.push_back(pre[j]+pre[j+1]);
                }
                cur.push_back(1);
                results.push_back(cur);
            }
            return results;
        }
    };

    Title:

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

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

    思路:使用滚动数组

    class Solution {
    public:
        vector<int> getRow(int rowIndex) {
            vector<int> result;
            if (rowIndex < 0)
                return result;
         
            result.push_back(1);
        
            for (int i = 0; i < rowIndex ; i++){
                vector<int> cur;
                cur.push_back(1);
                for (int j = 0 ; j < result.size()-1; j++){
                    cur.push_back(result[j]+result[j+1]);
                }
                cur.push_back(1);
                result = cur;
            }
            return result;
        }
    };
  • 相关阅读:
    zoj1654二分图
    zoj1314无源汇有上下界最大流
    zoj2788最小割
    zoj2587唯一最小割
    poj1815最小割
    Loader之一:基本原理
    Fragment之三:根据屏幕尺寸加载不同的Fragment
    Fragment之一:Fragment入门
    Github android客户端源代码分析之一:环境搭建
    如何在Eclipse中查看Android API源码以及support包源码
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4505429.html
Copyright © 2020-2023  润新知