您的位置:首页 > 其它

[Codewars]-Sudoku Solution Validator

2018-03-23 15:23 10 查看

[Codewars]-Sudoku Solution Validator

题目:

检查9*9数独矩阵是否有效。

根据三个条件判定:

1.每行数字不重复(1~9)

2.每列数字不重复(1~9)

3.9个3*3的九宫格数字不重复(1~9)

思路:

直接解就行

解答:

function validSolution(board){
//TODO
var len = board.length ;
var fanArr = fan(board)//矩阵翻转
//判定3*3九宫格
for(var x = 0 ; x <=6 ; x +=3){
for(var y = 0 ; y <= 6 ; y += 3){
var temp = 0
for(var a = 0 ; a<=2 ; a ++){
for(var b = 0 ; b <= 2 ; b++){
temp +=board[x+a][y+b]
}
}
if( temp !=45  ){
return false
break
}
}
}

for( let i = 0 ; i < len ; i ++){
//判定横向
if( isRepeat(board[i])  ){
return false
}
//判定纵向
if( isRepeat(fanArr[i])){
return false
}
}
return true
function isRepeat(arr){
arr = arr.sort(function(a,b){return a-b})
for(var i = arr.length-1 ; i >= 1 ; i --){
if(arr[i]==arr[i-1]){
return true
}
}
return false
}
function fan(arr){
var col = arr.length ;
var cow = arr[0].length;
var b = [];
for(var i = 0 ; i < col ; i ++){
b[i] = []
for(var j = 0 ; j < cow ; j ++){
b[i][j] = arr[j][i]
}
}
return b
}


补充下大神的做法

思路很清晰,横向纵向求和,小九宫格求和

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];
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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: