36. Valid Sudoku

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

pic3

逐个判断,复杂度$$O(n^2)$$

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        int row = board.size();
        int col = board[0].size();

        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                if(board[i][j] == '.')
                    continue;

                //所在行
                for(int k= 0; k < col; k++){
                    if(k != j && board[i][k] == board[i][j])
                        return false;
                }

                //所在列
                for(int m = 0; m < row; m++){
                    if(m != i && board[i][j] == board[m][j])
                        return false;
                }

                //所在正方形
                for(int m = i/3 * 3 ; m < (i/3 + 1)*3; m++){
                    for(int n = j/3 *3;  n< (j/3 + 1)*3; n++){
                        if(m != i && n != j && board[m][n] == board[i][j])
                            return false;
                    }
                }

            }
        }
        return true;
    }
};

用hash做


class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        //used1[m][n]表示在m行中数字(n+1)已经使用
        int used1[9][9] = {0};
        //used2[m][n]表示在m列中数字(n + 1)已经使用
        int used2[9][9] = {0};
        ////used[m][n]表示所在小正方形是否有n+1
        int used3[9][9] = {0};

        for(int i = 0; i < 9; i++){
            for(int j = 0; j < 9; j++){
                if(board[i][j] != '.'){

                    int num = board[i][j] - '0' - 1;
                    int k = i/3 * 3 + j/3;
                    if(used1[i][num] || used2[j][num] || used3[k][num])
                        return false;

                    used1[i][num] = used2[j][num] = used3[k][num] = 1;
                }
            }
        }
        return true;
    }
};

37. Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.

pic

pic2



results matching ""

    No results matching ""