如何验证2d阵列是否为n 2 * n 2 网格?基本上验证它是Sudoku的有效网格。所以4 * 4(2 2 * 2 2 )网格应该是真的,以及9 * 9(3 2 * 3 < SUP> 2 )。我猜我应该取每个数组D的长度,并检查它们是否是正方形。但它不能成为任何一个方块。所以我精神上陷入困境。请不要只是说它之前被问过并链接过去的数独求解器问题,因为我只想验证它是否是一个有效的网格来玩数独(现在)。我见过的所有过去的问题总是验证9 * 9的内容,而不是检查网格的实际大小。
到目前为止,我所有的都是
public Sudoku(int[][] g) {
theGrid = g;
}
private int[][] theGrid;
public boolean isValid() {
if (theGrid.length == 0)
return true;
if(theGrid[0].length!=theGrid[1].length)//sides arent the same length
return false;
}
任何帮助表示赞赏。感谢
答案 0 :(得分:1)
你的验证功能是这样的:
public boolean isValid() {
if ( theGrid.length == 0 ) {
return true;
}
if ( theGrid.length != theGrid[ 0 ].length ) {//sides arent the same length
return false;
}
final int n = theGrid.length;
final double sqrt = Math.sqrt( n );
return ( ( int ) sqrt ) == sqrt;
}
答案 1 :(得分:0)
因此,考虑到java中的array[][]
可以有不同的行大小,检查每一行会更好:
static boolean isValid(int[][] array) {
if(array.length == 0) return false;
double sqrt = Math.sqrt(array.length);
int x = (int) sqrt;
if(Math.pow(sqrt,2) != Math.pow(x,2)) return false;
return Arrays.stream(array).filter(ints -> ints.length != array.length).count() == 0;
}