关闭

Sudoku Solver : 53 lines and 12 ms

标签: leetcodec++
323人阅读 评论(0) 收藏 举报
分类:
class Solution {
public:
    bool helper(int r, int c, int mpRow[][9], int mpCol[][9], int mpGroup[][9], vector<vector<char> >& board) {
		if (r >= 9) {
			return true;
		}
		if (c >= 9){
			c = 0;
			if (helper(r+1, c, mpRow, mpCol, mpGroup, board)) 
				return true;
			return false;
		}
		if (board[r][c] != '.'){
			if (helper(r, c+1, mpRow, mpCol, mpGroup, board)) 
				return true;  
			return false;
		}
		for (int i = 0; i < 9; ++ i) {
			int are = r/3*3+c/3;
			if (board[r][c] == '.' && isValidNum(mpRow[r], mpCol[c], mpGroup[are], i)) {
				board[r][c] = '1' + i;
				mpRow[r][i] = mpCol[c][i] = mpGroup[are][i] = 1;
				if (helper(r, c+1, mpRow, mpCol, mpGroup, board))
					return true;
				board[r][c] = '.';
				mpRow[r][i] = mpCol[c][i] = mpGroup[are][i] = 0;
			}
		}
		return false;
    }
    
    bool isValidNum(int *mpRow, int *mpCol, int *mpGroup, int num) {
        if (mpRow[num] == 0 && mpCol[num] == 0 && mpGroup[num] == 0)
            return true;
        return false;
    }
    
    void solveSudoku(vector<vector<char> >& board) {
        int mpRow[9][9] = {{0}};
        int mpCol[9][9] = {{0}};
        int mpGroup[9][9] = {{0}};
        for (int i = 0; i < 9; ++ i) {
            for (int j = 0; j < 9; ++ j) {
                char c = board[i][j];
                if (c == '.')
                    continue;
                mpRow[i][c-'1'] = 1;
                mpCol[j][c-'1'] = 1;
                mpGroup[i/3*3+j/3][c-'1'] = 1;
            }
        }
		helper(0, 0, mpRow, mpCol, mpGroup, board);
    }
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:37847次
    • 积分:893
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论