- 作者: 负雪明烛
- id: fuxuemingzhu
- 个人博客:http://fuxuemingzhu.cn/
题目地址:https://leetcode-cn.com/problems/longest-happy-string/
题目描述给你一幅由 N × N
矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
示例 1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例 2:
给定 matrix =
[
[ 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]
]
题目大意
a 个字母 ‘a’、b 个字母 ‘b’、c 个字母 ‘c’,不准出现连续三个相同的字母。可以够成的最长的字符串是什么。
解题方法两次翻转
这个题和48. Rotate Image是一样的,都是需要两次翻转。
- 沿对角线翻转 交换方式是 ↙↗
- 沿着中轴线翻转 交换方式是 ←→
经过这两个翻转之后,就变成了顺时针旋转90°。
C++ 代码如下。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
const int N = matrix.size();
if (N <= 1) return;
for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
int swap = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = swap;
}
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N / 2; ++j) {
int swap = matrix[i][j];
matrix[i][j] = matrix[i][N - 1 - j];
matrix[i][N - 1 - j] = swap;
}
}
}
};
欢迎关注负雪明烛的刷题博客,leetcode刷题800多,每道都讲解了详细写法!
日期2020 年 4 月 7 日 —— 没被抽中盲审,开心