37. 解数独

题目:编写一个程序,通过填充空格来解决数独问题。
一个数独的解法需遵循如下规则:
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 '.' 表示。

提示:
给定的数独序列只包含数字 1-9 和字符 '.' 。
你可以假设给定的数独只有唯一解。
给定数独永远是 9x9 形式的。

代码: //卡住我两天,最开始每次board数组放入'k',以为放入了字符'1',结果把字符k放进去了,难怪每次都是错误,同时字符和数值转换也没学好 '0' == 48
class Solution {
public void solveSudoku(char[][] board) {
boolean b= backTrack(board,0,0);
}
public static boolean backTrack(char[][] board,int row,int col) { //回溯方法,每次都是放入一个位置
if(col9){row+=1;col=0;}
if(row
9){
return true;
}
if(board[row][col]=='.'){
for(int k=1;k<=9;k++){
board[row][col]= (char)(k + '0'); //卡住我两天,最开始放入'k',以为放入了字符'1',结果把字符k放进去了,难怪每次都是错误,同时字符和数值转换也没学好
if(isOk(board,row,col)){
if(backTrack(board,row,col+1)){return true;}
}
board[row][col]='.';
}
return false;
}

   return backTrack(board,row,col+1);
}

public static boolean isOk(char[][] board,int row,int col) {  //新放入的位置是i,j处,只检查这一处
         for(int i=0,j=0;i<9&&j<9;i++,j++){  //判断同行或同列
               if(i!=row){
                   if(board[i][col]==board[row][col]){return false;}
               }
               if(j!=col){
                   if(board[row][j]==board[row][col]){return false;}
               }
         }
         //判断9宫格   
               int i=row/3*3;  //元素所在行列的左上角元素行列下标
               int j=col/3*3;
               while(true){
                   if(i!=row||j!=col){
                       if(board[i][j]==board[row][col]){return false;}
                   }
                   j++;
                   if(j==col/3*3+3){
                       j=col/3*3;
                       i++;
                   }
                   if(i==row/3*3+3){break;}
               }                 
         return true;
}

}

posted @   堤苏白  阅读(163)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示