36. Valid Sudoku

原创 2016年05月30日 21:06:40

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

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


A partially filled sudoku which is valid.

Note:

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.


1.我的答案

class Solution {
public:
    bool check(vector<bool>& v, int num){
    if(v[num])
    return true;
    v[num] = true;
    return false;
}

bool isValidSudoku(vector<vector<char>>& board) {
    //开3个辟辅助空间
    vector<bool> rownum(10,false);
    vector<vector<bool>> colnum(9, vector<bool>(10,false));
    vector<vector<bool>> cellnum(9, vector<bool>(10,false));
    for(int i = 0; i < 9; i++){
        vector<bool>rownum(9,false);
        for(int j = 0; j < 9; j++){
            if(board[i][j] == '.')
            continue;
            bool b1 = check(rownum, board[i][j]-'0');
            bool b2 = check(colnum[j], board[i][j]-'0');
            bool b3 = check(cellnum[(i/3)*3+j/3], board[i][j]-'0');
            if(b1 || b2 || b3)
            return false;
        }
    }
    return true;
}
};

2.别人的答案 用位

bool isValidSudoku(vector<vector<char>>& board) {
    vector<short> col(9, 0);
    vector<short> block(9, 0);
    vector<short> row(9, 0);
    for (int i = 0; i < 9; i++)
     for (int j = 0; j < 9; j++) {
         if (board[i][j] != '.') {
             int idx = 1 << (board[i][j] - '0');
             if (row[i] & idx || col[j] & idx || block[i/3 * 3 + j / 3] & idx)
                return false;
            row[i] |= idx;
            col[j] |= idx;
            block[i/3 * 3 + j/3] |= idx;
         }
     }
     return true;
  }


LeetCode(36)Valid Sudoku

题目Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be...
  • fly_yr
  • fly_yr
  • 2015年08月25日 20:40
  • 2240

LeetCode 36 Valid Sudoku (C,C++,Java,Python)

Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku boa...
  • runningtortoises
  • runningtortoises
  • 2015年05月18日 22:56
  • 2972

LeetCode-36. Valid Sudoku (JAVA)(有效数独)

LeetCode-36. Valid Sudoku (JAVA)(有效数独)
  • mine_song
  • mine_song
  • 2017年04月17日 09:25
  • 445

LeetCode-36-Valid Sudoku 位运算状压,python的ascll,char互转

class Solution(object): def isValidSudoku(self, board): """ :type board: List[Li...
  • qdbszsj
  • qdbszsj
  • 2017年09月12日 22:35
  • 131

36. Valid Sudoku [easy] (Python)

题目链接https://leetcode.com/problems/valid-sudoku/题目原文 Determine if a Sudoku is valid, according to: ...
  • coder_orz
  • coder_orz
  • 2016年06月06日 16:35
  • 1422

Leetcode_36_Valid Sudoku

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42497857 Determine if a Su...
  • pistolove
  • pistolove
  • 2015年01月08日 19:15
  • 1439

LeetCode 36 Valid Sudoku(有效数独)

翻译数独板被部分填充,空格部分用'.'来填充。一个部分填充的数组是否有效只需要看其填充的部分即可。原文代码这道题写了一会,错了……因为输入太懒搞了,就直接看了别人写的……class Solution ...
  • NoMasp
  • NoMasp
  • 2015年11月30日 20:58
  • 3388

leetcode 36 Valid Sudoku C++

判断数独是不是正确的,就是判断每一行,每一列,每个小棋盘,有没有重复的。 用三个二维数组纪录。有就置1. 主要的是小棋盘序号的计算方法。 行为i/3*3 列为j/3 小棋盘的序号为行加列。 ...
  • a2331046
  • a2331046
  • 2016年06月02日 16:17
  • 125

【LeetCode】C# 36、Valid Sudoku

Sudoku数字游戏
  • qq_39643935
  • qq_39643935
  • 2017年10月11日 19:01
  • 44

LeetCode --- 36. Valid Sudoku

题目链接:Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Su...
  • makuiyu
  • makuiyu
  • 2015年02月05日 23:32
  • 603
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:36. Valid Sudoku
举报原因:
原因补充:

(最多只允许输入30个字)