37. 解数独_困难_矩阵
dfs,主要记住结束递归要用return
class Solution { int judge(char [][]board,int iIndex,int jIndex,char s){ int flag = 0; for(int j=0;j<9;j++){ if(board[iIndex][j] == s && jIndex!=j) flag=1; } for(int i=0;i<9;i++){ if(iIndex !=i && board[i][jIndex]==s) flag = 1; } for(int i=(iIndex-iIndex%3);i <(iIndex-iIndex%3+3);i++){ for(int j=(jIndex-jIndex%3);j<(jIndex-jIndex%3+3);j++){ if(i!=iIndex && jIndex!=j && board[i][j]==board[iIndex][jIndex]){ flag =1; break; } } } return flag; } void f(int level,int num,char[][]board,char[][]result,int [][]array){ // System.out.println("================="); if(level==num){ for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ result[i][j] = board[i][j]; } } return; }else{ for(int i =0;i<9;i++){ board[array[level][0]][array[level][1]] = (char)('1'+i); if(judge(board,array[level][0],array[level][1],board[array[level][0]][array[level][1]])==0){ f(level+1,num,board,result,array); } board[array[level][0]][array[level][1]] = '.'; } } } public void solveSudoku(char[][] board) { int num = 0; for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(board[i][j]=='.'){ num++; } } } int [][] array = new int[num][2]; int index =0; for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(board[i][j]=='.'){ array[index][0] = i; array[index++][1] = j; } } } char[][] result = new char[board.length][board.length]; f(0,num,board,result,array); for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ board[i][j] = result[i][j]; } } } }
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!