在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
class Solution {
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 。
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。
class Solution {
public:
int findNthDigit(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);
return s[index] - '0';
}
};
// The rand7() API is already defined for you.
// int rand7();
// @return a random integer in the range 1 to 7
class Solution {
public:
int rand10() {
int t = (rand7() - 1) * 7 + rand7();
if(t > 40) return rand10();
return (t - 1) % 10 + 1;
}
};
48. 旋转图像
https://leetcode.cn/problems/rotate-image/
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
class Solution {
public:
void rotate(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]);
}
};