在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
classSolution {public:vector<vector<int>> matrixReshape(vector<vector<int>>& nums,int r,int c) {int n =nums.size(), m =nums[0].size();if (n * m != r * c) return nums; vector<vector<int>>res(r,vector<int>(c));for (int i =0; i < n * m; i ++ )res[i / c][i % c] =nums[i / m][i % m];return res; }};
263. 丑数
https://leetcode.cn/problems/ugly-number/
丑数 就是只包含质因数 2、3 和 5 的正整数。
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
classSolution {public:boolisUgly(int n) {if(n <1) returnfalse;while(n %2==0) n /=2;while(n %3==0) n /=3;while(n %5==0) n /=5;if(n ==1) returntrue;returnfalse; }};
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。
classSolution {public:intfindNthDigit(int n) {int digit =1;long base =1;while(n >9* base * digit) { n -=9* base * digit; base *=10; digit++; }long val = base + (n -1) / digit;int index = (n -1) % digit; string s =to_string(val);returns[index] -'0'; }};
// The rand7() API is already defined for you.// int rand7();// @return a random integer in the range 1 to 7classSolution {public:intrand10() {int t = (rand7() -1) *7+rand7();if(t >40) returnrand10();return (t -1) %10+1; }};
48. 旋转图像
https://leetcode.cn/problems/rotate-image/
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
classSolution {public:voidrotate(vector<vector<int>>& matrix) {int n =matrix.size();for (int i =0, j = n -1; i < j; i ++, j --) swap(matrix[i],matrix[j]);for(int i =0; i < n; i++) for(int j = i; j < n; j++) swap(matrix[i][j],matrix[j][i]); }};