1.题目描述
矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例 1:
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]
示例 2:
输入:[[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]
提示:
1 <= A.length <= 1000
1 <= A[0].length <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/transpose-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.自己尝试
- 忽略 i,j 的不同,使得索引超出列表长度
- 列表的元素应该还是列表
- 可以改进1000为列表与子列表长度
class Solution:
def transpose(self, A: List[List[int]]) -> List[List[int]]:
B = [[] for _ in range(1000))]
for i in range(len(A)):
for j in range(len(A[0])):
B[i][j] = A[j][i]
return B
改进以后如下:
class Solution:
def transpose(self, A: List[List[int]]) -> List[List[int]]:
B = [[0 for _ in range(len(A))] for _ in range(len(A[0]))]
for i in range(len(A)):
for j in range(len(A[0])):
B[j][i] = A[i][j]
return B
3.他人做法
1.与本人做法类似,转自力扣精解
class Solution(object):
def transpose(self, A):
R, C = len(A), len(A[0])
ans = [[None] * R for _ in range(C)]
for r, row in enumerate(A):
for c, val in enumerate(row):
ans[c][r] = val
return ans
作者:LeetCode
链接:https://leetcode-cn.com/problems/transpose-matrix/solution/zhuan-zhi-ju-zhen-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.简便至极,转自力扣精解
class Solution(object):
def transpose(self, A):
return zip(*A)
# return [v for v in zip(*A)]
# return [[x[i] for x in A] for i in range(len(A[0]))]
作者:LeetCode
链接:https://leetcode-cn.com/problems/transpose-matrix/solution/zhuan-zhi-ju-zhen-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
例子:
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
4.Java代码
class Solution {
public int[][] transpose(int[][] A) {
int R = A.length, C = A[0].length;
int[][] ans = new int[C][R];
for (int r = 0; r < R; ++r)
for (int c = 0; c < C; ++c) {
ans[c][r] = A[r][c];
}
return ans;
}
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/transpose-matrix/solution/zhuan-zhi-ju-zhen-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
手打一遍为学习Java如下:
class Solution {
public int[][] transpose(inr[][] A) {
int R =A.length, C = A[0].length;
int[][] ans = new int[C][R];
for (int r = 0; r< R; ++r)
for (int c = 0;c<C; ++c) {
ans[c][r] = A[r][c];
}
return ans;
}
}