我在网上发现了一个有趣的编码挑战。任务是检查Sudoku程序的正确性。这是我编写的程序:

public static boolean check(int[][] sudoku) {
    String sudokuString = "";
    for(int[] a : sudoku)
      for(int b : a)
        sudokuString += b;
    for(int i = 0; i < 9; i++){
      for(int a = 1; a <= 9; a++){
        sudokuString = sudokuString.replaceFirst(Integer.toString(a), "");
      }
    }
    System.out.println(sudokuString);
    return sudokuString.length() == 0;
}


现在,我非常确定我的解决方案可以实现预期的功能,但是编码挑战网站却告诉我它不能。我不明白为什么我的解决方案不正确。

我正在寻求您的帮助。

非常感谢你!

最佳答案

步骤1了解数独的规则。
数独是9x9的数字网格。
每个单元格可以包含一位整数值(1-9)。
网格的每一列必须一次包含每个数字。
网格的每一行必须一次恰好包含每个数字。
每个3x3网格必须一次恰好包含每个数字。

步骤2注意规则。
短语“必须一次准确地包​​含每个数字”表示Set

步骤3设计解决该问题的算法。
对于每一列,构造一组数字。
如果(在处理每列的最后)集合包含九个元素,
则该列符合Sudoku的规则。

对于每一行,构造一组数字。
如果(在处理每行的最后)集合包含九个元素,
那么该行符合Sudoku的规则。

对于每个3x3网格,构造一组数字。
如果(在处理每个3x3网格结束时)该集合包含9个元素,则3x3网格符合Sudoku的规则。

步骤4编写一些代码。
在。

编辑:添加了3x3网格信息。

10-04 11:54