48. 旋转图像
描述
- 给定一个 n × n 的二维矩阵表示一个图像。
- 将图像旋转 90 度(顺时针)。
注意
- 你必须在原矩阵中旋转图像,请不要使用另一个矩阵来旋转图像。
示例
例 1:
给出的输入矩阵 =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
旋转输入矩阵,使其变为 :
[
[7,4,1],
[8,5,2],
[9,6,3]
]
例 2:
给出的输入矩阵 =
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
],
旋转输入矩阵,使其变为 :
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]
思路
- 拟人+积木思维(给你一堆积木,人该怎么办?) ==> 从外围开始一圈圈的转
- 总体思路比较快就想到了,但是落实到代码花了一定的时间。后续练习一定要加强落实。
class Solution_48 {
public:
void rotate(vector<vector<int>>& matrix) {
if (matrix.empty() || matrix[1].empty() ||
matrix.size() != matrix[1].size()) {
return;
}
int n = matrix.size();
int loop = (n + 1) / 2;
for (int i = 0; i < loop; ++i) {
RotateCicle(matrix, i, i, n - 2 * i);
}
}
void RotateCicle(vector<vector<int>>& matrix, int sRow, int sCol, int size) {
int loop = size - 1;
for (int i = 0; i < loop; ++i) { // 转loop组
int tmp = matrix[sRow][sCol + i];
matrix[sRow][sCol + i] = matrix[sRow + loop - i][sCol];
matrix[sRow + loop - i][sCol] = matrix[sRow + loop][sCol + loop - i];
matrix[sRow + loop][sCol + loop - i] = matrix[sRow + i][sCol + loop];
matrix[sRow + i][sCol + loop] = tmp;
}
}
};
344. 反转字符串
描述
示例
- 输入:s = "hello"
- 返回:"olleh"
思路
- 常规reverse的解法,两指针一头一尾。
- LeetCode上看到一个利用string的构造函数实现的,很不错,记录下来了。
class Solution_344_01 {
public:
string reverseString(string s) {
int start = 0;
int end = s.size() - 1;
while (start < end) {
char tmp = s[start];
s[start] = s[end];
s[end] = tmp;
++start;
--end;
}
return s;
}
};
class Solution_344_02 {
public:
string reverseString(string s) {
string s1(s.rbegin(), s.rend());
return s1;
}
};
网友评论