二维数组的顺时针旋转与逆时针旋转 python c++ 二维数组取第i列元素组成一个新列表(python)
刷剑指offer时候遇到的,写一个小功能函数放这儿
逆时针旋转
python版
def turn(self,matrix):
new = []
if not matrix: #列表为空,返回空列表 加这句主要是为空时下面计算列数时的matrix[0]超出下标范围
return new #或者return matrix 都一样
col = len(matrix[0])
for i in range(col-1,-1,-1): #从最后一列开始,注意col-1和 -1这两个
b = [j[i] for j in matrix] #取第i列元素
new.append(b)
return new
c++版
c++我没找到直接从二维vector中取某一列的方法,所以用了最笨的方法一个一个放
vector<vector<int> > turn(vector<vector<int> > matrix){
vector<vector<int> > newMatrix;
if(matrix.size()==0){
return matrix;
}
int col = matrix[0].size();
int row = matrix.size();
for(int i=col-1;i>=0;--i){
vector<int> temp;
for(int j=0;j<row;++j){
temp.push_back(matrix[j][i]);
}
newMatrix.push_back(temp);
}
return newMatrix;
}
二维数组取第i列元素组成一个新列表(python)
假设有一个二维列表matrix,可以用下面这句语句取matrix的第i列元素组成一个新列表
b = [j[i] for j in matrix]
顺时针旋转
一种方法是逆时针旋转三次就可以了,另一种如下:
def inverseTurn(matrix):
new = []
if not matrix: #列表为空,返回空列表
return new #或者return matrix 都一样
col=len(matrix[0])
for i in range(col): #从第一列开始
b = [j[i] for j in matrix] #取第i列元素
b.reverse()
new.append(b)
return new
c++自己按着这个补充就可以了。c++里面的一维vector的反转 reverse(b.begin(),b.end())
关于reverse的一个简单应用可以看看下面这篇 数组循环移位(从中间某个数开始往后循环到开头,再到某个数的前一个数)