leetcode-数独游戏

第一个问题:用程序实现数独的出题,而不是答题。换句话说就是验证给定的一个数独中的九宫格,该九宫格是否满足数独游戏的规则。

数独游戏的规则是什么:

  1. 每一行没有重复。
  2. 每一列没有重复。
  3. 每一个3x3的小格中没有重复。
    leetcode-数独游戏_第1张图片
    方法一:一次迭代法
class Solution{
     
   public boolean isValidSudoku(char[][]board){
     
   HashMap<Integer,Integer>[]rows=new HashMap[9];
   HashMap<Integer,Integer>[]columns=new HashMap[9];
   HashMap<Integer,Integer>[]boxs=new HashMap[9];
    
   for(int i=0;i<9;i++){
     
      rows[i]=new HashMap<Integer,Integer>();
      columns[i]=new HashMap<Integer,Integer>();
      boxes[i]=new HashMap<Integer,Integer>();
   }
   //validate a board
   for(int i=0;i<9;i++){
     
      for(int j=0;j<9;j++){
     
        char num=board[i][j];
        if(num!='.'){
     
         int n=(int)num;
         int box_index=(i/3)*3+j/3;

          rows[i].put(n,rows[i].getOrDefault(n,0)+1);
          columns[j].put(n,columns[j].getOrDefault(n,0)+1);
          boxes[box_index].put(n,boxes[box_index].getOrDefault(n,0)+1);
          
          if(rows[i].get(n)>1||columns[j].get(n)>1||boxes[box_index].get(n)>1)
          return false;
       }
     }
   }
   }
}

时间复杂度是O(1),因为我们只对81个单元格进行了一次迭代。
空间复杂度是O(1)。
getOrDefault:
这是源码,意思就是当Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue
引用

你可能感兴趣的:(leetcode-数独游戏)