[Swift]LeetCode48. 旋转图像 | Rotate Image
发布时间:2020-12-14 05:10:19 所属栏目:百科 来源:网络整理
导读:You are given an? n ?x? n ?2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Note: You have to rotate the image?in-place,which means you have to modify the input 2D matrix directly.?DO NOT?allocate another 2D mat
You are given an?n?x?n?2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Note: You have to rotate the image?in-place,which means you have to modify the input 2D matrix directly.?DO NOT?allocate another 2D matrix and do the rotation. Example 1: Given input matrix = [ [1,2,3],[4,5,6],[7,8,9] ],rotate the input matrix in-place such that it becomes: [ [7,4,1],[8,2],[9,6,3] ] Example 2: Given input matrix = [ [ 5,1,9,11],[ 2,10],[13,3,7],[15,14,12,16] ],rotate the input matrix in-place such that it becomes: [ [15,13,5],[14,[12,9],[16,7,10,11] ] 给定一个?n?×?n?的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,原地旋转输入矩阵,使其变为: [ [7,3] ] 示例 2: 给定 matrix = [ [ 5,原地旋转输入矩阵,使其变为: [ [15,11] ] 8ms 1 class Solution 2 { 3 func rotate(_ matrix: inout [[Int]]) 4 { 5 let temp = matrix; 6 7 for i in 0..<matrix.count 8 { 9 for j in 0..<matrix[0].count 10 { 11 matrix[j][matrix[0].count - 1 - i] = temp[i][j]; 12 } 13 } 14 } 15 } 12ms 1 class Solution { 2 func rotate(_ matrix: inout [[Int]]) { 3 matrix.reverse() 4 5 for i in 1..<matrix.count { 6 for j in 0..<i { 7 (matrix[i][j],matrix[j][i]) = (matrix[j][i],matrix[i][j]) 8 } 9 } 10 } 11 } 16ms 1 class Solution { 2 func rotate(_ matrix: inout [[Int]]) { 3 let layers:Int = matrix.count / 2 - 1 4 let n = matrix.count - 1 5 var currentLayerWidth = n - 1 //layer的宽度,每一层转 currentLayerWidth次 6 if layers < 0 { 7 return 8 } 9 for i in 0...layers { 10 if currentLayerWidth < 0 { 11 break 12 } 13 for j in 0...currentLayerWidth { //每层旋转逻辑 14 let x = i + j //i 层级,x 移动点(相对整个矩阵) 15 let firstPoint = matrix[i][x] 16 matrix[i][x] = matrix[n - x][i] 17 matrix[n - x][i] = matrix[n - i][n - x] 18 matrix[n - i][n - x] = matrix[x][n - i] 19 matrix[x][n - i] = firstPoint 20 } 21 //向内层靠近 22 currentLayerWidth = currentLayerWidth - 2 23 } 24 } 25 } 16ms 1 class Solution { 2 func rotate(_ matrix: inout [[Int]]) { 3 let n = matrix.count 4 5 for layer in 0..<n/2 { 6 let start = layer 7 let end = n - layer - 1 8 9 for i in start..<end { 10 let offset = i - start 11 (matrix[start][i],matrix[i][end],matrix[end][end-offset],matrix[end-offset][start]) = ( matrix[end-offset][start],matrix[start][i],matrix[end][end-offset]) 12 } 13 } 14 } 15 } 20ms 1 class Solution { 2 func rotate(_ matrix: inout [[Int]]) { 3 let count = matrix[0].count 4 for i in (0 ..< count) { 5 for t in (i ..< count) { 6 let d = matrix[t][i] 7 matrix[t][i] = matrix[i][t] 8 matrix[i][t] = d 9 } 10 } 11 12 for i in (0 ..< count) { 13 for t in (0 ..< (count + 1)/2 ) { 14 let temp = matrix[i][t] 15 matrix[i][t] = matrix[i][count - t - 1] 16 matrix[i][count - t - 1] = temp 17 } 18 } 19 } 20 } 28ms 1 class Solution { 2 func rotate(_ matrix: inout [[Int]]) { 3 let count = matrix.count 4 for i in 0..<count { 5 for j in i+1..<count { 6 if i == j { return } 7 // swap 8 matrix[i][j] = matrix[i][j] ^ matrix[j][i] 9 matrix[j][i] = matrix[i][j] ^ matrix[j][i] 10 matrix[i][j] = matrix[i][j] ^ matrix[j][i] 11 } 12 matrix[i].reverse() 13 } 14 } 15 } 36ms 1 class Solution { 2 func rotate(_ matrix: inout [[Int]]) { 3 4 for item in 0...matrix.count-1 { 5 for i in item...matrix.count-1 { 6 let tmpItem = matrix[item][i] 7 matrix[item][i] = matrix[i][item] 8 matrix[i][item] = tmpItem 9 } 10 } 11 for item in 0...matrix.count-1 { 12 matrix[item].reverse() 13 } 14 15 } 16 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |