將矩陣順時針旋轉90度 leetCode:Rotate Image
阿新 • • 發佈:2019-02-08
一個影象用矩陣表示,將這個影象順時針旋轉90度,也就是將矩陣順時針旋轉90度。演算法要求不使用額外的空間複雜度,in-place演算法。
觀察了一下矩陣的轉置,發現可以通過以此交換矩陣兩行,然後再求轉置的方式獲得。思路如下:
1、設矩陣有n行,則分別將i=0.1....(n/2-1)行與n-1-i行交換。(看上去有點像上半區與下半區交換)
2、求轉置,旋轉完成。
程式碼如下:
package leetCode; public class Solution { //交換矩陣的兩行 public void swap2line(int[][] matrix,int i,int j){ int col = matrix[i].length; int temp; for(int k=0;k<col;k++){ temp = matrix[i][k]; matrix[i][k] = matrix[j][k]; matrix[j][k] = temp; } } public void rotate(int[][] matrix) { if(matrix.length==0 || matrix[0].length==0){ return; } int row = matrix.length; int halfRow = matrix.length/2; for(int i=0;i<halfRow;i++){ //交換行 swap2line(matrix,i,row-1-i); } //求轉置 for(int i=0,j=0;i<row;i++,j++){ for(int k=i+1;k<row;k++){ int temp = matrix[i][k]; matrix[i][k] = matrix[k][j]; matrix[k][j] = temp; } } } public void display(int[][] matrix){ for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ System.out.print(matrix[i][j]+" "); } System.out.println(); } System.out.println(); } public static void main(String[] args) { Solution s = new Solution(); int[][] matrix = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; s.rotate(matrix); s.display(matrix); } }