数组 - 旋转图像
題目鏈接
順時針旋轉的數學表示為:matrix[row][col]=>matrix[col][n?row?1]matrix[row][col] => matrix[col][n-row-1]matrix[row][col]=>matrix[col][n?row?1]
可以通過上下翻轉+對角線翻轉來實現。
class Solution { public:void rotate(vector<vector<int>>& matrix) {// matrix[row][col] => matrix[col][n-row-1]int n = matrix.size();// 上下翻轉 matrix[row][col] => matrix[n-row-1][col]for (int i = 0; i < n/2; ++i) {for(int j = 0; j < n; ++j) {swap(matrix[i][j], matrix[n-i-1][j]);}}// 對角線翻轉 matrix[row][col] => matrix[col][n-row-1]for (int i = 0; i < n; ++i) {for (int j = i+1; j < n; ++j) {swap(matrix[i][j], matrix[j][i]);}}} };也可以通過臨時變量來實現旋轉,每個位置的移動一共涉及到四個元素的移動。
class Solution { public:void rotate(vector<vector<int>>& matrix) {// matrix[row][col] => matrix[col][n-row-1]int n = matrix.size();for (int i = 0; i < n/2; ++i) {for(int j = 0; j < (n+1)/2; ++j) {int temp = matrix[i][j];matrix[i][j] = matrix[n-j-1][i];matrix[n-j-1][i] = matrix[n-i-1][n-j-1];matrix[n-i-1][n-j-1] = matrix[j][n-i-1];matrix[j][n-i-1] = temp;}}} }; 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 贪心/动态规划 - 买卖股票的最佳时机含
- 下一篇: 贪心/栈 - 去除重复字母