[leetcode] [36] [javascript] Valid Sudoku

效能很差

/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function(board) {
    
    var check = function(ar){
        var ob = {};
        for(var j=0;j<9;j++){
            if(ar[j] == '.'){
                continue;
            }
            if(ob[ar[j]] === undefined){
                ob[ar[j]] = 1;
            }else{
                return false;
            }
        }
        return true;
    };
    
    var getAr = function(i){
        var r = parseInt(i/3);
        var c = i%3;
        var ar = [];
        ar.push(board[r*3+0][c*3+0]);
        ar.push(board[r*3+0][c*3+1]);
        ar.push(board[r*3+0][c*3+2]);
        ar.push(board[r*3+1][c*3+0]);
        ar.push(board[r*3+1][c*3+1]);
        ar.push(board[r*3+1][c*3+2]);
        ar.push(board[r*3+2][c*3+0]);
        ar.push(board[r*3+2][c*3+1]);
        ar.push(board[r*3+2][c*3+2]);
        return ar;
        
    };
    
    var getcAr = function(i){
        var ar = [];
        ar.push(board[0][i]);
        ar.push(board[1][i]);
        ar.push(board[2][i]);
        ar.push(board[3][i]);
        ar.push(board[4][i]);
        ar.push(board[5][i]);
        ar.push(board[6][i]);
        ar.push(board[7][i]);
        ar.push(board[8][i]);
        console.log('car:', ar);
        return ar;
    };
    
    for(var i=0;i<9;i++){
        if(!check(getAr(i))){
            return false;
        }
    }
    for(i=0;i<9;i++){
        if(!check(board[i])){
            return false;
        }
    }
    for(i=0;i<9;i++){
        if(!check(getcAr(i))){
            return false;
        }
    }
    return true;
};

看別人寫有用O(n^2)的解法 用三個表分別記錄每一格所屬的那行那列那小九格是不是有重複的值

留言

這個網誌中的熱門文章

a005: Eva 的回家作業