ภาพรวม
โจทย์นี้ต้องการให้ทำการกลับลำดับแถว (reverse) ของมาทริกซ์ไบนารี จากนั้นกลับค่าแต่ละบิต (0 กลายเป็น 1, 1 กลายเป็น 0) ซึ่งเป็นการดำเนินการที่พบได้บ่อยในการประมวลผลภาพและอัลกอริทึมต่างๆ
ตัวอย่าง
อินพุต:
| 1 | 1 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
เอาต์พุต:
| 1 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
ขั้นตอนการแก้ปัญหา
- วนลูปผ่านแต่ละแถวของมาทริกซ์
- กลับลำดับแถวด้วย
row.reverse() - วนลูปผ่านแต่ละค่าในแถวที่กลับแล้ว
- ถ้าค่าเป็น 1 ให้เปลี่ยนเป็น 0, ถ้าเป็น 0 ให้เปลี่ยนเป็น 1
- อัปเดตค่าในมาทริกซ์เดิม
โค้ด Python
class Solution:
def solve(self, mat):
track = 0
for row in mat:
row.reverse()
tracker = 0
for val in row:
if val == 1:
mat[track][tracker] = 0
else:
mat[track][tracker] = 1
tracker += 1
track += 1
return mat
ob = Solution()
mat = [[1,1,0],[0,1,0],[0,0,1]]
print(ob.solve(mat))
วิธีการเขียนสั้นๆ (Pythonic)
def flip_and_invert(mat):
return [[1 - val for val in reversed(row)] for row in mat]
ผลลัพธ์
[[1, 0, 0], [1, 0, 1], [0, 1, 1]]