程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)
生活随笔
收集整理的這篇文章主要介紹了
程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給定一幅由N × N矩陣表示的圖像,其中每個像素的大小為4字節(jié),編寫一種方法,將圖像旋轉90度。
不占用額外內存空間能否做到?
示例 1: 給定 matrix = [[1,2,3],[4,5,6],[7,8,9] ],原地旋轉輸入矩陣,使其變?yōu)?span id="ze8trgl8bvbq" class="token operator">: [[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] ], 原地旋轉輸入矩陣,使其變?yōu)?span id="ze8trgl8bvbq" class="token operator">: [[15,13, 2, 5],[14, 3, 4, 1],[12, 6, 8, 9],[16, 7,10,11] ]來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/rotate-matrix-lcci
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
2. 解題
類似題目:LeetCode 5776. 判斷矩陣經輪轉后是否一致
2.1 兩次遍歷
class Solution { public:void rotate(vector<vector<int>>& matrix) {int i, j, a, b;for(i = 0; i < matrix.size(); ++i){ //對角線交換for(j = 0; j < i; ++j)swap(matrix[i][j], matrix[j][i]);}for(i = 0; i < matrix.size(); ++i){ //每行反轉a = 0, b = matrix[0].size()-1;while(a < b)swap(matrix[i][a++], matrix[i][b--]);}} };2.2 一次遍歷
class Solution { public:void rotate(vector<vector<int>>& matrix) {int i, j, n = matrix.size();for(i = 0; i < n/2; ++i){for(j = i; j < n-i-1; ++j){swp(matrix[i][j], matrix[n-1-j][i]);swp(matrix[n-1-j][i], matrix[n-1-i][n-1-j]);swp(matrix[n-1-i][n-1-j], matrix[j][n-1-i]);}}}inline void swp(int&a, int&b){// b = a^b;// a = a^b;// b = a^b;//或者一行代替a ^= b ^= a ^= b;} };總結
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1339. 分裂二叉树
- 下一篇: LeetCode 147. 对链表进行插