2016-07-05 78 views
1

我目前正在使用SudokuChecker我想檢查數獨的子字段[3x3]。下面的代碼是這樣的:數獨統計子字段

int[][] field = new field[9][9]; 
int wrongNumbers = 0; 
for (int i = 0; i < 9; i += 3) { 
    for (int j = 0; j < 9; j += 3) { 

     // Check subfield by using an array 
     int arr[] = new int[10]; 
     for (int k = 0; k < 3; k++) { 
      for (int l = 0; l < 3; l++) { 
       arr[field[i + k][j + l]]++; 
      } 
     } 

     for (int k = 1; k < arr.length; k++) { 
      wrongNumbers += arr[k] > 1 ? arr[k] - 1 : 0; 
     } 
    } 
} 

我想知道對於給定的代碼是否有任何改進? (我不是在談論使39等常數)

回答

0

我發現Codefights一個很好的答案,從thucnguyen:

boolean sudoku(int[][] grid) { 
    for (int i = 0; i <9; i++) { 
     int row = 0, col = 0, group = 0; 
     for (int j = 0; j <9; j++) { 
      // check for row i 
      row += grid[i][j]; 

      // check for col i 
      col += grid[j][i]; 

      // check for sub-grid i 
      group += grid[i/3 * 3 + j/3][i % 3 * 3 + j % 3]; 
     } 

     if (row != 45 || col != 45 || group != 45) return false; 
    } 

    return true; 
}