day 4-数组
1、重塑矩阵
-
描述
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。 重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。 如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。 示例 1: 输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]] 示例 2: 输入:mat = [[1,2],[3,4]], r = 2, c = 4 输出:[[1,2],[3,4]]
-
思路
判断总数是否相同
遍历数组,逐个放入新数组
-
代码
class Solution { public: vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) { cout << mat.size() << " " << mat[0].size() << endl; if(mat.size() == 0 || mat[0].size() * mat.size() != r * c) return mat; int num = 0; cout << num << " " << c << endl; vector<vector<int>> res(r,vector<int>(c,0)); for (int i = 0; i < (int) res.size(); ++i) { for (int j = 0; j < (int) res[i].size(); ++j) { cout << res[i][j] << ","; } cout << endl; } cout << res.size() << " " << res[0].size() << endl; cout << num / c << " " << num % c << endl; cout << res[num / c][num % c] << endl; for(int i = 0; i < mat.size(); i++) { for(int j = 0; j < mat[0].size(); j++) { printf("num: %d , res[%d][%d]: %d , mat[%d][%d]: %d\n",num,num/c,num%c,res[num/c][num%c],i,j,mat[i][j]); res[num/c][num%c] = mat[i][j]; printf("num: %d , res[%d][%d]: %d , mat[%d][%d]: %d\n",num,num/c,num%c,res[num/c][num%c],i,j,mat[i][j]); num++; } } return res; } }; int main() { Solution sol; vector<vector<int>> mat = {{1,2,3,4}}; int r = 2; int c = 2; sol.matrixReshape(mat, r, c); return 0; }
2、杨辉三角
-
描述
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows = 1 输出: [[1]]
-
思路
遍历生成
-
代码
#include <iostream> #include <vector> using namespace std; class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>> res; if(numRows >= 1) res.push_back(vector<int>(1,1)); for(int i = 1; i < numRows; i++) { res.push_back(vector<int>(i + 1 ,0)); for(int j = 0; j <= i; j++) { if(j == 0) res[i][j] = res[i-1][j]; else if(j == i) res[i][j] = res[i-1][j-1]; else res[i][j] = res[i-1][j-1] + res[i-1][j]; printf("%d\t",res[i][j]); } printf("\n"); } for(int i = 0; i < numRows; i++) { for(int j = 0; j <= i; j++) { printf("%d\t",res[i][j]); } printf("\n"); } return res; } }; int main() { int num = 1; Solution sol; sol.generate(num); return 0; }