二維陣列的順時針旋轉與逆時針旋轉 python c++ 二維陣列取第i列元素組成一個新列表(python)
阿新 • • 發佈:2021-06-10
刷劍指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的一個簡單應用可以看看下面這篇 陣列迴圈移位(從中間某個數開始往後迴圈到開頭,再到某個數的前一個數)