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 &