Sudoku Solution Validator

题目描述

Sudoku Background:
Sudoku is a game played on a 9x9 grid. The goal of the game is to fill all cells of the grid with digits from 1 to 9, so that each column, each row, and each of the nine 3x3 sub-grids (also known as blocks) contain all of the digits from 1 to 9.

题目描述

我的代码

function validSolution(board){
  //TODO
  var flag = 1;
  
  for(j=0; j<9; j++){
    var sumcol = 0;
    var sum = 0;
// 计算列和是否为45
    for(i=0; i<9; i++){
      sumcol += board[i][j];
    }
    if(sumcol != 45){
        flag = 0;
        break;
    }
// 计算行和是否为45,利用数组的方法求和
    board[j].some(function(item,i){
      sum += item;
    })
    if(sum != 45){
      flag = 0;
      break;
    }
  }
// 计算前9个宫格的和是否为45
  var sumgrid = 0;
  for(k=0; k<3; k++){   
    for(l=0; l<3; l++){
      sumgrid += board[k][l];
    }
  }
  if(sumgrid != 45){
    flag = 0;
  }
  
  if(flag){
    return true;
  }else{
    return false;
  }
}

Clever

function equals45(n){ 
return n == 45;
} 
function validSolution(board){
var sumh = [0,0,0,0,0,0,0,0,0]; 
var sumv = [0,0,0,0,0,0,0,0,0]; 
osums = [[0,0,0],[0,0,0],[0,0,0]]; 
for (var i=0;i<9;i++){ 
 for (var j=0;j<9;j++){
  sumh[i] += board[i][j]; 
  sumv[j] += board[i][j]; // 这里我认为应该是board[j][i]
  osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j]; 
 } 
} 
for (var i=0;i<3;i++)
 if (!osums[i].every(equals45)) 
  return false;
return (sumh.every(equals45) && sumv.every(equals45)); }

Key

  • every()方法只有数组中每一项执行回调函数结果合部为true才会返回,不然就会返回false。

常见的数组操作方法

-这个题的做法实质上是不能正确验证是否是数独解。因为若每个cell都是5,满足行、列、每个9宫格的和为45的条件,但不满足数独解的条件。

-------------完-------------