LeetCode-48-Rotate Image(模拟)-Medium

来源:互联网 发布:js引用数据类型有哪些 编辑:程序博客网 时间:2024/05/16 18:29

题意理解:

将给定二维矩阵顺时针选择90度;


题目分析:

1. 一层一层的旋转(解题代码中就是这个方法);

2. 技巧解法:将原始矩阵上下对折,然后再对角对折,等效于顺时针选择90度(没有想懂其中的数学原理);


解题代码:

class Solution {private:    int read(vector<vector<int>> &m, int layer, int index){        int size=m.size();        int cap=size-2*layer;        if(index<cap){            return m[layer][layer+index];        }else if(index<2*cap){            return m[layer+index-cap][size-1-layer];//        }else if(index<3*cap){            return m[size-1-layer][size-1-layer-(index-2*cap)];        }else{            return m[size-1-(index-3*cap)-layer][layer];//        }}    void set(vector<vector<int>> &m, int layer, int index, int value){        int size=m.size();        int cap=size-2*layer;        if(index<cap){            m[layer][layer+index]=value;            return;        }else if(index<2*cap){            m[layer+index-cap][size-1-layer]=value;//            return;        }else if(index<3*cap){            m[size-1-layer][size-1-layer-(index-2*cap)]=value;            return;        }else{            m[size-1-(index-3*cap)-layer][layer]=value;            return;        }}public:    void rotate(vector<vector<int>>& matrix) {        int size=matrix.size();        for(int i=0; i<size/2; i++){            int cap=size-2*i;            for(int j=0; j<cap-1; j++){                int top= read(matrix, i, j);                cout<<"top= "<<top<<endl;                int left=read(matrix, i, cap*3+j);                cout<<"left= "<<left<<endl;                set(matrix, i, j, left);//top                                int bottom=read(matrix, i, cap*2+j);                cout<<"bottom= "<<bottom<<endl;                set(matrix, i, cap*3+j, bottom);//left                                int right=read(matrix, i, cap+j);                cout<<"right= "<<right<<endl;                set(matrix, i, cap*2+j, right);//bottom                                set(matrix, i, cap+j, top);//right            }        }    }};


0 0
原创粉丝点击