我正在用java编写一个sodoku游戏,其中一条规则是每一行不能多次包含相同的数字(1-9)。数字0表示该框为空。如果发现重复项,我的“checkrow”布尔方法应该返回“false”,如果没有找到重复项,则返回“true”(正确的行)。我知道如何查找重复项,但由于值“0”表示空框,因此允许重复“0”。
我如何做到这一点?
这是我到目前为止想出的代码。它在每个测试用例中都返回“true”(未找到重复项)。
public boolean checkRow(int row){
for (int k = 0; k < grid.length; k++){
for (int i = k + 1; i < grid.length; i++){
if (grid[row][k] == (grid[row][i]) && grid[row][k] != 0) {
return false;
}
}
}
return true;
}
使用加法数组存储找到的值的代码:
public boolean checkRow(int row){
int[] found = new int[9];
for (int k = 0; k < grid.length; k++){
if (grid[row][k] > 0 && grid[row][k] < 10){
found[grid[row][k]]++;
}
if (found[grid[row][k]] > 1){
return false;
}
}
return true;
}
这也只返回true。
提前谢谢!
1条答案
按热度按时间ddarikpa1#
根据@thomas comment,解决方案可以如下(不使用全局
grid
变量)测试
输出
使用流api的等效解决方案如下所示: