美文网首页
LeetCode 118. Pascal's Triangle

LeetCode 118. Pascal's Triangle

作者: 洛丽塔的云裳 | 来源:发表于2020-04-24 23:41 被阅读0次

0. 题目

Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.


1.c++ 版本

    vector<int> pascal(vector<int>& nums) {
        vector<int> rows;
        int len = nums.size();
        rows.push_back(1);
        for (int i=1; i<len; ++i) { 
            rows.push_back(nums[i-1] + nums[i]);
        }
        if (!nums.empty())
            rows.push_back(1);
        return rows;
    }
    
    vector<vector<int>> generate(int numRows) {
        vector<vector<int> > results;
        vector<int> rows;
        for (int i=0; i<numRows; ++i) {
            rows = pascal(rows);
            results.push_back(rows);
        }
        return results;
    }

升级版本,注意 Pascal's Triangle, 其实是左右是对称的. 在子函数 pascal 不用全部都遍历计算,只用处理len/2,其他用对称就可以

  vector<int> pascal(vector<int>& nums, int line) {
        vector<int>rows(line+1);
        int len = nums.size();
        rows[0]=1;
        for (int i=1; i<=len/2; ++i) {
            rows[i] = nums[i-1] + nums[i];
            rows[len-i] = rows[i];
        }
        if (!nums.empty())
            rows[line] = 1;
        return rows;
    }
    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> results;
        vector<int> rows;
        for (int i=0; i<numRows; ++i) {
            rows = pascal(rows, i);
            results.push_back(rows);
        }
        return results;
    }

版本3:参考https://leetcode.com/problems/pascals-triangle/discuss/38171/Maybe-shortest-c%2B%2B-solution
其思想就是直接使用二维数组。注意二维数组初始化,以及resize用法(http://www.cplusplus.com/reference/vector/vector/resize/)

    vector<vector<int>> generate(int numRows) {
        vector<vector<int>> results(numRows);
        for (int i=0; i< numRows; i++) {
            int len = i+1;
            results[i].resize(len);
            results[i][0] = results[i][i] = 1;
            for (int j=1; i>1 && j<=len/2; ++j) {
                results[i][j] = results[i-1][j-1] + results[i-1][j];
                results[i][len-1-j] = results[i][j];
            }
        }
        return results;
    }

2. python 版本

class Solution(object):
    def pascal(self, nums):
        """
        统计每个
        """
        rows = []
        rows.append(1)
        length = len(nums)
        for i in range(1, length):
            rows.append(nums[i-1] + nums[i])
        if nums:
            rows.append(1)
        return rows

    def generate(self, numRows):
        """
        :type numRows: int
        :rtype: List[List[int]]
        """
        results = []
        rows = []
        for i in range(0, numRows):
            rows = self.pascal(rows)
            results.append(rows)
        return results
        

相关文章

网友评论

      本文标题:LeetCode 118. Pascal's Triangle

      本文链接:https://www.haomeiwen.com/subject/cxjcwhtx.html