列表

详情


NC245. 杨辉三角(一)

描述

给定一个非负整数 num ,生成杨辉三角的前 num 行。
杨辉三角中,每个数是左上方和右上方的数之和。

数据范围:

例如当输入为4时,对应的返回值为[[1],[1,1],[1,2,1],[1,3,3,1]],打印结果如下图所示:

示例1

输入:

1

输出:

[[1]]

示例2

输入:

4

输出:

[[1],[1,1],[1,2,1],[1,3,3,1]]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 388KB, 提交时间: 2022-01-23

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > generate(int num) {
        // write code here
        vector<vector<int>> res(num,vector<int>(num));
        for(int i=0;i<num;i++){
            for(int j=0;j<i+1;j++){
                if(!j) res[i][j]=1;
                else
                    res[i][j]=res[i-1][j]+res[i-1][j-1];
            }
        }
        for(int i=0;i<num;i++)
            res[i].resize(i+1);
        return res;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2022-01-25

class Solution {
public:
    /*
    方法一:数组模拟(利用1个数组)
    
    解题思路
    首先新建一个二维数组,用于存储所有数字。遍历每一层,确定每一层子数组,
    根据每个数等于左上方和右上方的数之和,确定每一层子数组的每一个值。
    
    复杂度分析
    时间复杂度:总共两层循环,需要执行(num+1)∗(num+2)/2次,所以时间复杂度是O(num^2)
    空间复杂度:需要额外大小为(num+1)∗(num+2)/2的res数组,所以空间复杂度为O(num^2)
    */
    vector<vector<int> > generate1_1(int num) {
        vector<vector<int>> res(num, vector<int>()); //二维数组,指定行数不指定列数
        for(int i = 0; i <= num - 1; i++) {
            res[i] = vector<int>(i + 1); //存储当前层数字
            for (int j = 0; j <= i; ++j) {
                if (j == 0 || i == j)
                    res[i][j] = 1; //当前层第1个数字
                else
                    //每个数等于左上方和右上方的数之和
                    res[i][j] = res[i - 1][j - 1] + res[i - 1][j];
            }
        }
        return res;
    }
    
    /*
    方法一另一种写法:创建2个数组
    */
    vector<vector<int> > generate(int num) {
        vector<vector<int>> ans; //最终返回结果
        vector<int> temp; //缓存当前行结果
        for(int i = 0 ; i < num ; ++i) {
            for(int j = 0 ; j <= i ; ++j) {
                if(j ==0 || i == j)
                    temp.push_back(1);
                else 
                    temp.push_back(ans[i-1][j-1] + ans[i-1][j]);
            }
            ans.push_back(temp);
            temp.clear();
        }
        return ans;
    }
    
};

C++ 解法, 执行用时: 3ms, 内存消耗: 312KB, 提交时间: 2022-02-05

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > generate(int num) {
        // write code here
        vector<vector<int> > res;
        if(num == 1) return {{1}};
        if(num == 2) return {{1},{1,1}};
        res.push_back(vector<int>(1,1));
        res.push_back(vector<int>(2,1));
        for(int i = 3; i <= num; i ++) {
            res.push_back(vector<int>(i,1));
            for(int j = 1; j < i-1 ; j++) {
                res[i-1][j] = res[i-2][j-1]+ res[i-2][j];
            }
        }
        return res;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-08-05

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > generate(int num) {
        // write code here
        vector<vector<int>> res;
        for(int i=0;i<num;i++){
            vector<int> cur(i+1,0);
            for(int j=0;j<i+1;j++){
                if(i>0&&j>0&&j<i){
                 cur[j]=res[i-1][j-1]+res[i-1][j];
                }else cur[j]=1;
            }
            res.push_back(cur);
        }
        return res;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-08-03

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > generate(int num) {
      // write code here      
      vector<vector<int> > local_Vector_result;
      for (int i = 0; i < num; i++) {
        vector<int> local_Vector_element;
        if (local_Vector_result.empty()) {
          local_Vector_element.push_back(1);
          local_Vector_result.push_back(local_Vector_element);
          continue;
        }
        vector<int> local_Vector_last = local_Vector_result.back();
        local_Vector_element.push_back(1);  
        for (int j = 0; j < local_Vector_last.size() - 1; j++) {
          local_Vector_element.push_back(local_Vector_last[j] + local_Vector_last[j+1]);
        }
        local_Vector_element.push_back(1);  
        local_Vector_result.push_back(local_Vector_element);
      }
      return local_Vector_result;
    }
};

上一题