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

來源:互聯網
上載者:User

LeetCode 36 Valid Sudoku (C,C++,Java,Python),leetcodesudoku
Problem:

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.

Solution:根據數獨遊戲的規則,一個9行9列的棋盤,每行每列和每一個3*3的小方格都不能有重複的數字,並且數字只能是0-9,逐一判斷這些規則是否滿足即可
題目大意:給定一個二維數組,判定是否滿足數獨遊戲的規則,不需要判斷沒有填上的點,只需要判斷已經有的數字是否滿足
Java原始碼(320ms):
public class Solution {    public boolean isValidSudoku(char[][] board) {        int i,j,k,l;        if(board.length!=9 || board[0].length!=9)return false;        int[] map;        for(i=0;i<9;i++){            map= new int[10];            for(j=0;j<9;j++){                if(board[i][j]=='.')continue;                if(board[i][j]<'0' || board[i][j]>'9')return false;                int num=board[i][j]-'0';                if(map[num]==1)return false;                map[num]=1;            }        }        for(j=0;j<9;j++){            map=new int[10];            for(i=0;i<9;i++){                if(board[i][j]=='.')continue;                int num=board[i][j]-'0';                if(map[num]==1)return false;                map[num]=1;            }        }        for(i=0;i<9;i+=3){            for(j=0;j<9;j+=3){                map=new int[10];                for(k=i;k<i+3;k++){                    for(l=j;l<j+3;l++){                        if(board[k][l]=='.')continue;                        int num=board[k][l]-'0';                        if(map[num]==1)return false;                        map[num]=1;                    }                }            }        }        return true;    }}

C語言原始碼(4ms):
bool isValidSudoku(char** board, int boardRowSize, int boardColSize) {    int map[10],i,j,k,l,num;    if(boardRowSize!=9 || boardColSize!=9)return false;    for(i=0;i<9;i++){        memset(map,0,sizeof(map));        for(j=0;j<9;j++){            if(board[i][j]=='.')continue;            if(board[i][j]<'0' || board[i][j]>'9')return false;            num=board[i][j]-'0';            if(map[num]!=0)return false;            map[num]=1;        }    }    for(j=0;j<9;j++){        memset(map,0,sizeof(map));        for(i=0;i<9;i++){            if(board[i][j]=='.')continue;            num=board[i][j]-'0';            if(map[num]!=0)return false;            map[num]=1;        }    }    for(i=0;i<9;i+=3){        for(j=0;j<9;j+=3){            memset(map,0,sizeof(map));            for(k=i;k<i+3;k++){                for(l=j;l<j+3;l++){                    if(board[k][l]=='.')continue;                    num=board[k][l]-'0';                    if(map[num]!=0)return false;                    map[num]=1;                }            }        }    }    return true;}

C++原始碼(12ms):
class Solution {public:    bool isValidSudoku(vector<vector<char>>& board) {        int i,j,k,l,map[10];        if(board.size()!=9 || board[0].size()!=9)return false;        for(i=0;i<9;i++){            memset(map,0,sizeof(map));            for(j=0;j<9;j++){                if(board[i][j]=='.')continue;                if(board[i][j]<'0' || board[i][j]>'9')return false;                int num=board[i][j]-'0';                if(map[num])return false;                map[num]=1;            }        }        for(j=0;j<9;j++){            memset(map,0,sizeof(map));            for(i=0;i<9;i++){                if(board[i][j]=='.')continue;                int num=board[i][j]-'0';                if(map[num])return false;                map[num]=1;            }        }        for(i=0;i<9;i+=3){            for(j=0;j<9;j+=3){                memset(map,0,sizeof(map));                for(k=i;k<i+3;k++){                    for(l=j;l<j+3;l++){                        if(board[k][l]=='.')continue;                        int num=board[k][l]-'0';                        if(map[num])return false;                        map[num]=1;                    }                }            }        }        return true;    }};

Python原始碼(104ms):
class Solution:    # @param {character[][]} board    # @return {boolean}    def isValidSudoku(self, board):        if len(board)!=9 or len(board[0])!=9:return False        for i in range(9):            map=[0 for k in range(10)]            for j in range(9):                if board[i][j]=='.':continue                if board[i][j]<'0' or board[i][j]>'9':return False                num = ord(board[i][j])-ord('0')                if map[num]==1:return False                map[num]=1        for j in range(9):            map=[0 for k in range(10)]            for i in range(9):                if board[i][j]=='.':continue                num = ord(board[i][j])-ord('0')                if map[num]==1:return False                map[num]=1        for i in range(0,9,3):            for j in range(0,9,3):                map=[0 for k in range(10)]                for k in range(i,i+3):                    for l in range(j,j+3):                        if board[k][l]=='.':continue                        num = ord(board[k][l])-ord('0')                        if map[num]==1:return False                        map[num]=1        return True


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.