Pythonで有効な数独
- 各行には、繰り返しなしで1〜9の数字が含まれている必要があります。
- 各列には、繰り返しなしで1〜9の数字が含まれている必要があります。
- グリッドの9つの(3x3)サブボックスのそれぞれには、繰り返しなしで1〜9の数字が含まれている必要があります。
数独グリッドが-
のようなものだとします| 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 |
これを解決するには、次の手順に従います-
- 0から8の範囲のiの場合
- row、col、block、row_cube:=3 *(i / 3)、col_cube:=3 *(i mod 3)という空の辞書を作成します
- 0〜8の範囲のjの場合
- board [i、j]が空白でなく、board [i、j]が連続している場合は、falseを返します
- row [board [i、j]]:=1
- board [j、i]が空白でなく、board [j、i]が列にある場合は、falseを返します
- col [board [j、i]]:=1
- rc:=row_cube + j / 3およびcc:=col_cube + j mod 3
- ブロック内のboard[rc、cc]およびboard [rc、cc]が空白でない場合は、falseを返します
- block [board [rc、cc]]:=1
- trueを返す
理解を深めるために、次の実装を見てみましょう-
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
for i in range(9):
row = {}
column = {}
block = {}
row_cube = 3 * (i//3)
column_cube = 3 * (i%3)
for j in range(9):
if board[i][j]!='.' and board[i][j] in row:
return False
row[board[i][j]] = 1
if board[j][i]!='.' and board[j][i] in column:
return False
column[board[j][i]] = 1
rc= row_cube+j//3
cc = column_cube + j%3
if board[rc][cc] in block and board[rc][cc]!='.':
return False
block[board[rc][cc]]=1
return True
ob1 = Solution()
print(ob1.isValidSudoku([
["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"]])) 入力
[["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"]]
出力
true
-
C++で有効な数独
数独と呼ばれる9×9のマトリックスを与えたとしましょう。タスクは、指定された数独パターンが有効かどうかを確認することです。 一般的に、数独ボードは次のようになります 数独のルール − すべての行には、1〜9の範囲の数値が含まれています すべての列には、1〜9の範囲の数字が含まれています。 3×3の各ブロックには一意の番号が含まれています。 特定の行に同じ番号を付けることはできません。 特定の列に同じ番号を付けることはできません。 例 入力-1 − sudoku[]= [["3","5&q
-
Pythonで複数の値を返しますか?
Python関数は複数の値を返すことができます。これらの値は、変数に直接格納できます。関数は変数を返すように制限されていません。0、1、2、またはそれ以上の値を返すことができます。 これは、C++やJavaなどの他の多くのプログラミング言語では使用できない複数の値/変数を返すPythonのデフォルトのプロパティです。 関数から複数の値を返す場合は、要件に応じてタプル、リスト、またはディクショナリオブジェクトを返すことができます。 方法1:タプルを使用する def func(x): y0 = x+ 1 y1 = x * 3 &