ภาพรวม
โจทย์เรียงลำดับคอลัมน์ของมาทริกซ์จากน้อยไปมาก (ascending) โดยแต่ละคอลัมน์เรียงแยกกัน
ตัวอย่าง
อินพุต:
[[11, 21, 31], [6, 6, 4], [1, 11, 8]]
คอลัมน์ 0: [11,6,1] → [1,6,11]
คอลัมน์ 1: [21,6,11] → [6,11,21]
คอลัมน์ 2: [31,4,8] → [4,8,31]
เอาต์พุต:
[[1, 6, 4], [6, 11, 8], [11, 21, 31]]
โค้ด Python
class Solution:
def solve(self, matrix):
R = len(matrix)
C = len(matrix[0])
res = [[0] * C for _ in range(R)]
for col in range(C):
values = [r[col] for r in matrix]
values.sort(reverse=True)
for row in range(R):
res[row][col] = values.pop()
return res
ob = Solution()
matrix = [[11, 21, 31], [6, 6, 4], [1, 11, 8]]
print(ob.solve(matrix))
วิธีเขียนสั้นกว่า (zip + sorted)
def sort_columns(matrix):
return [list(row) for row in zip(*[sorted(col) for col in zip(*matrix)])]
อธิบาย
zip(*matrix)ทรานสโปส (แถว↔คอลัมน์)- เรียงแต่ละคอลัมน์
zip(*...)ทรานสโปสกลับ
ผลลัพธ์
[[1, 6, 4], [6, 11, 8], [11, 21, 31]]