ぶんすう独


leetcode 37. ぶんすう独
  • 参考覃超先生の解法
  • func solveSudoku(board [][]byte) {
       if len(board) == 0 {
          return
       }
       solve(board)
    }
    
    func solve(board [][]byte) bool {
       for i := 0; i < 9; i++ {
          for j := 0; j < 9; j++ {
             //        
             if board[i][j] == '.' {
                //     1-9
                for c := '1'; c <= '9'; c++ {
                   //   1-9    
                   if isValid(board, i, j, byte(c)) { //   
                   	  //   
                      board[i][j] = byte(c)
                      //      
                      if solve(board) {
                         return true
                      } else { //      ,       
                         board[i][j] = '.'
                      }
                   }
                }
                // 1-9     
                return false
             }
          }
       }
       //    
       return true
    }
    
    func isValid(board [][]byte, row, col int, c byte) bool {
       for i := 0; i < 9; i++ {
          //       
          if board[i][col] == c {
             return false
          }
          //       
          if board[row][i] == c {
             return false
          }
          //          
          if board[3*(row/3)+i/3][3*(col/3)+i%3] == c {
             return false
          }
       }
       return true
    }