zoukankan      html  css  js  c++  java
  • 【leetcode】Valid Sudoku

    问题:

    Sudoku Solver 中说道,会有一些提示解。这里就是验证下给定的提示解是否合法,即已经填加的数是否满足要求的三个条件。

    bool isValidSudoku(vector<vector<char> > &board) {
    	
        const int M = 9;//9 * 9
    	const int hash_len = 60;//'0' = 48 + 10
    	const char dot = '.';
    	//check rows 
    	for(int i = 0; i < M; ++i)
    	{
    	  bool rows[hash_len] = {false};
    	  bool cols[hash_len] = {false};
    	  for(int j = 0; j < M; ++j){
    	    if(board[i][j] != dot)
    	    {
    	        if(rows[board[i][j]])
    	            return false;
    	        else 
    	            rows[board[i][j]] = true;
    	    }
    	    
    	  }
    	}
       //check cols
        for(int i = 0; i < M; ++i)
    	{
    	  bool rows[hash_len] = {false};
    	  for(int j = 0; j < M; ++j){
    	    if(board[j][i] != dot)
    	    {
    	        if(rows[board[j][i]])
    	            return false;
    	        else 
    	            rows[board[j][i]] = true;
    	    }
    	  }
    	}
    	//check inner boxes. 9 * (3 * 3)
    	const int N = 3;
    	for(int ibox = 0; ibox < M; ++ibox)
    	{
    		bool box[hash_len] = {false};
    		for (int irow = 0; irow < N; ++irow)
    		{
    			for (int icol = 0; icol < N; ++icol)
    			{
    				if(board[ibox/N*N + irow][ibox%N*N + icol] != dot &&
    					box[board[ibox/N*N + irow][ibox%N*N + icol]])
    					return false;
    				if(board[ibox/N*N + irow][ibox%N*N + icol] != dot)
    				box[board[ibox/N*N + irow][ibox%N*N + icol]] = true;
    			}
    		}
    	}
    	return true;
    }

    这个代码没进行简化,显得非常繁琐,这里仅仅是为了明了思路。
  • 相关阅读:
    防抖、节流函数
    vue如何监听数组的变化
    scss的循环和数组
    linux更新node版本
    函数节流和防抖函数
    vue-cli 使用,更新
    webstorm自动编译scss
    git冲突的处理
    linuix 安装 mysql8
    脚本安装mysql 8
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6992440.html
Copyright © 2011-2022 走看看