泉州找工作哪个网站好,有没有什么网站做卷子,蒙古文门户网站建设督导,大连开发区网站设计公司力扣labuladong一刷day19天花式遍历 文章目录 力扣labuladong一刷day19天花式遍历一、48. 旋转图像二、54. 螺旋矩阵三、59. 螺旋矩阵 II 一、48. 旋转图像
题目链接#xff1a;https://leetcode.cn/problems/rotate-image/ 思路#xff1a;把矩阵向右旋转90度#xff0c;要…力扣labuladong一刷day19天花式遍历 文章目录 力扣labuladong一刷day19天花式遍历一、48. 旋转图像二、54. 螺旋矩阵三、59. 螺旋矩阵 II 一、48. 旋转图像
题目链接https://leetcode.cn/problems/rotate-image/ 思路把矩阵向右旋转90度要求原地操作这里借鉴了把一个字符串里所有单词顺序给翻转的思路单词顺序翻转其实是先翻转整个字符串然后再翻转每一个单词即可完成而不是按照空格把每一个单词分隔开再拼回去。 把矩阵沿着左上角和右下角这条对对角线翻转然后再每一行横向翻转即可得到顺时针旋转90度。
class Solution {public void rotate(int[][] matrix) {int n matrix.length;for (int i 0; i n; 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[] nums : matrix) {int i 0, j nums.length-1;while (i j) {int temp nums[i];nums[i] nums[j];nums[j] temp;i;j--;}}}
}二、54. 螺旋矩阵
题目链接https://leetcode.cn/problems/spiral-matrix/ 思路每次读取一条边然后每遍历一条边就调整边界。
class Solution {ListInteger spiralOrder(int[][] matrix) {int m matrix.length, n matrix[0].length;int upper_bound 0, lower_bound m - 1;int left_bound 0, right_bound n - 1;ListInteger res new LinkedList();// res.size() m * n 则遍历完整个数组while (res.size() m * n) {if (upper_bound lower_bound) {// 在顶部从左向右遍历for (int j left_bound; j right_bound; j) {res.add(matrix[upper_bound][j]);}// 上边界下移upper_bound;}if (left_bound right_bound) {// 在右侧从上向下遍历for (int i upper_bound; i lower_bound; i) {res.add(matrix[i][right_bound]);}// 右边界左移right_bound--;}if (upper_bound lower_bound) {// 在底部从右向左遍历for (int j right_bound; j left_bound; j--) {res.add(matrix[lower_bound][j]);}// 下边界上移lower_bound--;}if (left_bound right_bound) {// 在左侧从下向上遍历for (int i lower_bound; i upper_bound; i--) {res.add(matrix[i][left_bound]);}// 左边界右移left_bound;}}return res;}
}三、59. 螺旋矩阵 II
题目链接https://leetcode.cn/problems/spiral-matrix-ii/ 思路正方形的螺旋矩阵可以按照四条边遍历每次只遍历左闭右开正好每次遍历一个圈。
class Solution {public int[][] generateMatrix(int n) {int[][] matrix new int[n][n];int k 1;for (int i 0; i n / 2; i) {for (int j i; j n-i-1; j) {matrix[i][j] k;}for (int j i; j n-i-1; j) {matrix[j][n-i-1] k;}for (int j n-i-1; j i; j--) {matrix[n-i-1][j] k;}for (int j n-i-1; j i; j--) {matrix[j][i] k;}}if (n % 2 0) return matrix;matrix[n/2][n/2] k;return matrix;}
}