程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Valid Sudoku -- LeetCode

Valid Sudoku -- LeetCode

編輯:C++入門知識

 

這道題是Sudoku Solver的一個子問題,在解數獨的時候我們需要驗證當前數盤是否合法。其實思路比較簡單,也就是用brute force。對於每一行,每一列,每個九宮格進行驗證,總共需要27次驗證,每次看九個元素。所以時間復雜度就是O(3*n^2), n=9。代碼如下:

public boolean isValidSudoku(char[][] board) {
    if(board==null || board.length!=9 || board[0].length!=9)
        return false;
    for(int i=0;i<9;i++)
    {
        boolean[] map = new boolean[9];
        for(int j=0;j<9;j++)
        {
            if(board[i][j] != '.')
            {
                if(map[(int)(board[i][j]-'1')])
                {
                    return false;
                }
                map[(int)(board[i][j]-'1')] = true;
            }
        }
    }
    for(int j=0;j<9;j++)
    {
        boolean[] map = new boolean[9];
        for(int i=0;i<9;i++)
        {
            if(board[i][j] != '.')
            {
                if(map[(int)(board[i][j]-'1')])
                {
                    return false;
                }
                map[(int)(board[i][j]-'1')] = true;
            }
        }
    }        
    for(int block=0;block<9;block++)
    {
        boolean[] map = new boolean[9];
        for(int i=block/3*3;i這道題其實沒有什麼好的算法,基本上就是遍歷去檢查,實現上就是數組的操作,屬於Sudoku
 Solver的subroutine,但是在Sudoku
 Solver中實現上又可以進行優化,沒必要每次檢查整個board,只需要看當前加進去的數就可以,有興趣的朋友可以看看哈。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved