注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
刚学习javascript,用js写这道题总也通不过,完全一样的算法用java(基本逐行翻译)是可以AC的。请大家看看是怎么回事,Thanks~- var rows=new Array(9);
- var cols=new Array(9);
- var grids=new Array(9);
- for(var i=0;i<9;i++){
- rows[i]=new Set();
- cols[i]=new Set();
- grids[i]=new Set();
- }
- var solveSudoku = function(board) {
- for(var i=0;i<9;i++){
- for(var j=0;j<9;j++){
- if(board[i][j]==='.')
- continue;
- rows[i].add(board[i][j]);
- cols[j].add(board[i][j]);
- grids[Math.floor(i/3)*3+Math.floor(j/3)].add(board[i][j])
- }
- }
- sudokuSolver(board,0);
- return;
- };
- var sudokuSolver=function(board,n){
- if(n==81)
- return true;
- row=Math.floor(n/9);
- col=n%9;
- var ch=board[row][col];
- if(ch!=='.'){
- return sudokuSolver(board,n+1);
- }
- for(var c='1';c<='9';c++){
- if(rows[row].has(c)||cols[col].has(c)||
- grids[Math.floor(row/3)*3+Math.floor(col/3)].has(c))
- continue;
- board[row][col]=c;
- rows[row].add(c);
- cols[col].add(c);
- grids[Math.floor(row/3)*3+Math.floor(col/3)].add(c);
- if(sudokuSolver(board,n+1))
- return true;
- rows[row].delete(c);
- cols[col].delete(c);
- grids[Math.floor(row/3)*3+Math.floor(col/3)].delete(c);
- }
- board[row][col]='.';
- return false;
- }
复制代码 出错的case如下:
Input:["..9748...","7........",".2.1.9...","..7...24.",".64.1.59.",".98...3..","...8.3.2.","........6","...2759.."]
Output:["129748345","734256178","526139299","217345246","364612594","498789312","641823523","752461886","893275917"]
Expected:["519748632","783652419","426139875","357986241","264317598","198524367","975863124","832491756","641275983"]
看起来问题似乎是Set没能判断出已经重复的元素,所以出现了“752461886”这种。
|