题解 | #Sudoku#

Sudoku

http://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

const rl = require('readline').createInterface({
    input: process.stdin
})
let zeroMap = []
let line = 0
const ins = []
rl.on('line',data => {
    const b = data.split(' ').map((v,i) => {
        if(v === '0') zeroMap.push([line,i])
        return Number(v)
    })
    ins.push(b)
    line++
})
rl.on('close', () => {
    getSurplus(0)
    console.log(ins.map(v => v.join(' ')).join('\n'))
})
function getSurplus(index=0){
    if(index >= zeroMap.length) return 1
   const [i,j] = zeroMap[index]
   const arr = getRelativeArr(i,j)
   let arr1 = []
   let usefulArr = []
   for(let ii = 0; ii < arr.length; ii++){
       const arr2 = getSurplusFromOneArr(arr[ii])
       arr1.push(arr2)
   }
    for(let k = 0; k < arr1[0].length;k++){
        if(arr1[1].includes(arr1[0][k]) && arr1[2].includes(arr1[0][k])) usefulArr.push(arr1[0][k])
    }
    if (usefulArr.length === 0) return 0
    for (let iii = 0; iii < usefulArr.length; iii++) {
        ins[i][j] = usefulArr[iii]
        if( getSurplus(index+1) === 1) return 1
        ins[i][j] = 0
    }
    return -1
}

function getSurplusFromOneArr(arr){
    return [1,2,3,4,5,6,7,8,9].filter(v => !arr.includes(v))
}

function getRelativeArr(i,j){
    const arr = []
    const ii = [~~(i/3), i % 3]
    const jj = [~~(j/3), j % 3]
    for(let k = 0; k < 3; k++){
        for(let kk = 0; kk < 3; kk++){
            arr.push(ins[ii[0]*3+(ii[1]+k)%3][jj[0]*3+(jj[1]+kk)%3])
        }
    }
    return [ins[i],ins.map(v => v[j]),arr]
}
全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务