৯×৯ সুডোকু গ্রিড দেওয়া থাকলে, শুধু ভরা সেলগুলো নিচের নিয়ম মেনে চলে কিনা যাচাই করতে হবে:
- প্রতিটি সطر (Row) এ ১-৯ ডিজিট একবারই আসবে।
- প্রতিটি কলাম (Column) এ ১-৯ ডিজিট একবারই আসবে।
- প্রতিটি ৩×৩ সাব-বক্সে ১-৯ ডিজিট একবারই আসবে।
একই পাসে Row, Column, Block চেক
i (০-৮) লুপে প্রতিটি সেটের জন্য ডিকশনারি/সেট ব্যবহার করুন। ব্লকের ইনডেক্স ক্যালকুলেশন: row_cube = 3*(i//3), col_cube = 3*(i%3)। ভিতরের লুপে j (০-৮) দিয়ে ব্লকের সেল: rc = row_cube + j//3, cc = col_cube + j%3।
পাইথন কোড
class Solution:
def isValidSudoku(self, board):
for i in range(9):
row, column, block = {}, {}, {}
row_cube = 3 * (i // 3)
col_cube = 3 * (i % 3)
for j in range(9):
# Row চেক
if board[i][j] != '.' and board[i][j] in row:
return False
row[board[i][j]] = 1
# Column চেক
if board[j][i] != '.' and board[j][i] in column:
return False
column[board[j][i]] = 1
# Block চেক
rc = row_cube + j // 3
cc = col_cube + j % 3
if board[rc][cc] in block and board[rc][cc] != '.':
return False
block[board[rc][cc]] = 1
return True
# টেস্ট
ob1 = Solution()
board = [
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".",".","8",".","7","9"]
]
print(ob1.isValidSudoku(board)) # True
টাইম কমপ্লেক্সিটি: O(1) (ফিক্সড ৯×৯), স্পেস: O(1)। এটি লিটকোড "Valid Sudoku" সমস্যা।