বিবেচনা করুন আমাদের একটি ম্যাট্রিক্স আছে, সেই ম্যাট্রিক্সে যদি একটি উপাদান 0 হয়, তাহলে সেই ম্যাট্রিক্সের পুরো সারি এবং কলামটিকে 0 করুন। রূপান্তরটি ইন-প্লেস হবে। তাই যদি ম্যাট্রিক্স হয় −
1 | 0 | 1 | ৷
1 | 1 | ৷1 | ৷
1 | 1 | ৷1 | ৷
তারপর আউটপুট হবে −
0 | 0 | 0 |
1 | 0 | 1 | ৷
1 | 0 | 1 | ৷
আসুন ধাপগুলো দেখি -
- n :=সারির সংখ্যা, m :=কলামের সংখ্যা, পতাকা সেট করুন :=মিথ্যা
- যদি mat[0, 0] =0 হয়, তাহলে পতাকা সেট করুন :=true
- সারি সেট করুন :=false, এবং col :=false
- আমি 1 থেকে n
- পরিসরে
- যদি mat[i, 0] =0 হয়, তাহলে col :=True সেট করুন এবং লুপ ভাঙুন
- আমি 1 থেকে m
- রেঞ্জের মধ্যে
- যদি mat[0, i] =0, তারপর সারি সেট করুন :=True এবং লুপ ভাঙুন
- আমি 1 থেকে n
- পরিসরে 1 থেকে m
- যদি mat[i, j] =0 হয়, তাহলে mat[i, 0] =0 এবং mat[0, j] :=0 সেট করুন
- পরিসরে j-এর জন্য
- পরিসরে 1 থেকে m
- যদি mat[i, 0] =0 এবং mat[0, j] =0 হয়, তাহলে mat[i, j] =0 সেট করুন
- পরিসরে j-এর জন্য
- আমি 0 থেকে n রেঞ্জের জন্য, ম্যাট [i, 0] :=0
- আমি 0 থেকে m, mat[0, i] :=0 রেঞ্জের জন্য
- যদি col সেট করা হয়, তাহলে 0 থেকে n রেঞ্জের i এর জন্য, mat [i, 0] :=0
- যদি সারি সেট করা হয়, তাহলে i এর জন্য 0 থেকে m, mat [0, i] :=0
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution(object): def setZeroes(self, matrix): n = len(matrix) m = len(matrix[0]) flag = False if matrix[0][0] == 0: flag = True row = False column = False for i in range(1,n): if matrix[i][0] == 0: column = True break for i in range(1,m): if matrix[0][i] == 0: row = True break for i in range(1,n): for j in range(1,m): if matrix[i][j] == 0: matrix[0][j] = 0 matrix[i][0]=0 for i in range(1,n): for j in range(1,m): if not matrix[i][0] or not matrix[0][j]: matrix[i][j] = 0 if flag: for i in range(n): matrix[i][0] = 0 for i in range(m): matrix[0][i]=0 else: if column: for i in range(n): matrix[i][0]=0 if row: for i in range(m): matrix[0][i]=0 return matrix ob1 = Solution() print(ob1.setZeroes([[1,0,1],[1,1,1],[1,1,1]]))
ইনপুট
[[1,0,1],[1,1,1],[1,1,1]]
আউটপুট
[[0, 0, 0], [1, 0, 1], [1, 0, 1]]