方法一:按照对角线反转一次,每行在反转一次就ok
void rotate(vector<vector<int> > &matrix) {
//unsigned m=matrix.size();
// if(m<1)
// return;
// unsigned n=matrix[0].size();
// if(m!=n)
// return;
//上面的写法太渣。。
if(matrix.empty()||matrxi.size()==0||matrix[0].size()!=matrix.size())
return ;
unsigned n=matrix.size();
for(unsigned i=0;i<n;i++)
for(unsigned j=0;j<i;j++){
int temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
for(unsigned i=0;i<n;i++)
reverse(matrix[i].begin(),matrix[i].end());
return;
}
方法二:看别人的,4个元素为一组顺时针交换值
- void rotate(vector<vector<int> > &matrix) {
- // Start typing your C/C++ solution below
- // DO NOT write int main() function
- int n = matrix.size();
- for (int i = 0; i < n/2; ++i) //一圈一圈的交换
- {
- for (int j = i; j < n-1-i; ++j)
- {
- int tmp = matrix[i][j];
- matrix[i][j] = matrix[n-1-j][i];
- matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
- matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
- matrix[j][n-1-i] = tmp;
- }
- }
- }