বিবেচনা করুন একটি ম্যাট্রিক্স আছে, সেটিতে যদি কোনো একক উপাদান ০ হয়, তবে সেই ম্যাট্রিক্সের পুরো সারি এবং কলামকে ০ করুন। কনভার্সন ইন-প্লেস হবে। ম্যাট্রিক্স যদি নিচের মতো হয়:
| 1 | 0 | 1 |
| 1 | 1 | 1 |
| 1 | 1 | 1 |
তবে আউটপুট হবে:
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 1 | 0 | 1 |
ধাপগুলো (O(1) স্পেস কমপ্লেক্সিটি):
n := সারি সংখ্যা,m := কলাম সংখ্যা,flag := false- যদি
mat[0][0] == 0, তবেflag := true row := false,col := falsei১ থেকেnপর্যন্ত- যদি
mat[i][0] == 0, তবেcol := Trueএবং লুপ ব্রেক
- যদি
i১ থেকেmপর্যন্ত- যদি
mat[0][i] == 0, তবেrow := Trueএবং লুপ ব্রেক
- যদি
i১ থেকেnপর্যন্তj১ থেকেmপর্যন্ত- যদি
mat[i][j] == 0, তবেmat[i][0] = 0এবংmat[0][j] := 0
- যদি
i১ থেকেnপর্যন্তj১ থেকেmপর্যন্ত- যদি
mat[i][0] == 0এবংmat[0][j] == 0, তবেmat[i][j] = 0
- যদি
- যদি
flagসেটi০ থেকেn,mat[i][0] := 0i০ থেকেm,mat[0][i] := 0
- অন্যথায়
- যদি
colসেট, তবেi০ থেকেn,mat[i][0] := 0 - যদি
rowসেট, তবেi০ থেকে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]]