class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
// 第一步:转置矩阵(沿主对角线翻转)
// 相当于字符串反转中的"反转整个字符串"
for (int i = 0; i < n; i++) {
// j 从 i 开始,只遍历上三角区域,避免重复交换
for (int j = i; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 第二步:反转每一行
// 相当于字符串反转中的"反转每个单词"
for (int i = 0; i < n; i++) {
int left = 0, right = n - 1;
while (left < right) {
int temp = matrix[i][left];
matrix[i][left] = matrix[i][right];
matrix[i][right] = temp;
left++;
right--;
}
}
}
}
我们这里用到先转整体再转头尾
1.按对角线用二维数组将他转下
2.头尾换
这样就能得到90度转换后的数组了
力扣151:151. 反转字符串中的单词 - 力扣(LeetCode)

class Solution {
public String reverseWords(String s) {
// \\s+ 表示按"一个或多个空格"分割,trim 去掉首尾空格
String[] words = s.trim().split("\\s+");
StringBuilder sb = new StringBuilder();
for (int i = words.length - 1; i >= 0; i--) {
sb.append(words[i]);
if (i > 0) sb.append(" ");
}
return sb.toString();
}
}
其实就是用Java本身的api把空格删掉,然后从后往前来输出
!\[屏幕截图 2026-07-29 090956.png]
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result=new ArrayList();
int m[][]=matrix;
while(m !=null && m.length>0){
for(int i=0;i<m[0].length;i++){
result.add(m[0][i]);
}
m=addleft(m);
}
return result;
}
private int[][] addleft(int[][]m){
int rows=m.length-1;
int col=m[0].length;
if(rows<=0)return null;
int res[][]=new int[col][rows];
for(int i=0;i<rows;i++){
for (int j = 0; j < col; j++) {
res[j][i]=m[i+1][j];
}
}
for(int i=0;i<rows;i++){
int left=0;
int right=col-1;
while(left<right){
int t=res[left][i];
res[left][i]=res[right][i];
res[right][i]=t;
left++;
right--;
}
}return res;
}
}
每次遍历第一行,然后把剩下的顺时针旋转90度,然后首尾交换,再遍历第一行.
力扣59题:
class Solution {
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
int top = 0, bottom = n - 1;
int left = 0, right = n - 1;
int num = 1;
while (top <= bottom && left <= right) {
// ① 向右:填 top 行,从 left 到 right
for (int j = left; j <= right; j++) {
matrix[top][j] = num++;
}
top++;
// ② 向下:填 right 列,从 top 到 bottom
for (int i = top; i <= bottom; i++) {
matrix[i][right] = num++;
}
right--;
// ③ 向左:填 bottom 行,从 right 到 left
if (top <= bottom) {
for (int j = right; j >= left; j--) {
matrix[bottom][j] = num++;
}
bottom--;
}
// ④ 向上:填 left 列,从 bottom 到 top
if (left <= right) {
for (int i = bottom; i >= top; i--) {
matrix[i][left] = num++;
}
left++;
}
}
return matrix;
}
}
按环形循环填充数组

