leetcode37. 解數獨(hashmap+回溯)

編寫一個程序,通過已填充的空格來解決數獨問題。
一個數獨的解法需遵循如下規則:
數字 1-9 在每一行只能出現一次。
數字 1-9 在每一列只能出現一次。
數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。
空白格用 ‘.’ 表示。
Note:
給定的數獨序列只包含數字 1-9 和字符 ‘.’ 。
你可以假設給定的數獨只有唯一解。
給定數獨永遠是 9x9 形式的。

代碼

class Solution {Map<Integer,HashSet<Integer>> col=new HashMap<>();//記錄行Map<Integer,HashSet<Integer>> row=new HashMap<>();//記錄列Map<Integer,Map<Integer,HashSet<Integer>> >map3=new HashMap<>();//記錄3x3public void solveSudoku(char[][] board) {int n=board.length,m=board[0].length;for(int i=0;i<n;i++)row.put(i,new HashSet<>());for(int j=0;j<m;j++)col.put(j,new HashSet<>());for(int i=0;i<3;i++){map3.put(i,new HashMap<>());for(int j=0;j<3;j++)map3.get(i).put(j,new HashSet<>());}for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(Character.isDigit(board[i][j]))//將已經填好的數據存進hashmap{col.get(j).add(board[i][j]-'0');row.get(i).add(board[i][j]-'0');map3.get(i/3).get(j/3).add(board[i][j]-'0');}getSolveSudoku(board,0);}public boolean getSolveSudoku(char[][] board,int loc) {if(loc==81) return true;int i=loc/9,j=loc%9;if(Character.isDigit(board[i][j])) {return getSolveSudoku(board, loc+1);}else {for(int k=1;k<10;k++)//遍歷所有可能的情況{if(col.get(j).contains(k)||row.get(i).contains(k)|| map3.get(i/3).get(j/3).contains(k)) continue;//當前數字不滿足col.get(j).add(k);row.get(i).add(k);map3.get(i/3).get(j/3).add(k);board[i][j]=(char) (k+'0');if(getSolveSudoku(board, loc+1)) return true;board[i][j]='.';col.get(j).remove(k);//回溯map3.get(i/3).get(j/3).remove(k);row.get(i).remove(k);}return false;}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392955.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

malloc、calloc、realloc和alloca各種的區別

需要先包含頭文件 #include"malloc.h"malloc是標準的在堆中開辟新的空間比如char *pt(char *)malloc(10*sizeof(char));需要free(p)才會釋放空間calloc也是開辟空間&#xff0c;但是使用方式不一樣比如char *pt(char *)calloc(100, sizeof(char));然后用calloc開辟的…

如何對第一個Vue.js組件進行單元測試

by Sarah Dayan通過莎拉達揚 In Build Your First Vue.js Component we made a star rating component. We’ve covered many fundamental concepts to help you create more complex Vue.js components.在“ 構建您的第一個Vue.js組件”中&#xff0c;我們制作了星級評分組件…

Asp.NetCoreWebApi - RESTful Api

REST 常用http動詞 WebApi 在 Asp.NetCore 中的實現3.1. 創建WebApi項目.3.2. 集成Entity Framework Core操作Mysql 3.2.1. 安裝相關的包(為Xxxx.Infrastructure項目安裝)3.2.2. 建立Entity和Context3.2.3. ConfigureService中注入EF服務3.2.4. 遷移數據庫3.2.5. 數據庫遷移結果…

android動畫影子效果,Android TV常用動畫的效果,View選中變大且有陰影(手機也能用)...

因為電視屏幕比較大&#xff0c;而我們看電視時距離電視有一定距離&#xff0c;這樣就需要動畫效果比較明顯&#xff0c;這個動畫就是應用最廣泛的&#xff0c;因為很酷&#xff0c;呵呵&#xff0c;你懂得&#xff0c;看了就知道。效果如下圖&#xff1a;public class MainAct…

leetcode226. 翻轉二叉樹(dfs)

翻轉一棵二叉樹。示例&#xff1a;輸入&#xff1a;4/ \2 7/ \ / \ 1 3 6 9 輸出&#xff1a;4/ \7 2/ \ / \ 9 6 3 1代碼 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode righ…

Java BigDecimal Rounding Mode

UP        往絕對值大了取 DOWN      往絕對值小了取 CEILING     往值大了取 FLOOR      往值小了取 HALF_UP     不管正負&#xff0c;四舍五入 HALF_DOWN  不管正負&#xff0c;五舍六入 HALF_EVEN    整數部分為奇數&#xff1a;四舍五入…

如何成為一名有效的軟件工程師

by Luis Santiago路易斯圣地亞哥(Luis Santiago) 如何成為一名有效的軟件工程師 (How to become an effective software engineer) When I first started my journey as a software engineer I quickly noticed the great amount of cognitive load involved when working on …

linux 高可用----keepalived+lvs

什么是高可用&#xff1f; HA&#xff08;high availability&#xff09;即高可用性&#xff1b;就是在高可用集群中發生單點故障時&#xff0c;能夠自動轉移資源并切換服務&#xff0c;以保證服務一直在線的機制。 LVS LVS&#xff1a;&#xff08;linux virtual server&#…

用戶配置相關文件

用戶配置相關文件小總結 /etc/passwd 記錄用戶相關的信息 /etc/shadow 密碼影子文件 /etc/group 記錄用戶組相關的信息 /etc/gshadow 密碼影子文件&#xff08;組密碼&#xff09; /etc/passwd 文件中各段的內容 第1段&#xff1a;用戶名 第…

華為5c android n風格,華為榮耀暢玩5C的屏幕怎么樣

華為榮耀暢玩5C的屏幕怎么樣屏幕方面&#xff0c;華為榮耀暢玩5C采用了5.2英寸1080P級別GFF貼合屏幕&#xff0c;塑料邊框采用了弧面狀的設計&#xff0c;握感比較舒適。華為榮耀暢玩5C采用了雙主天線的設計&#xff0c;分別在上下的塑料區域。此外&#xff0c;邊框以及后蓋的上…

spring解析配置文件(三)

一、從XmlBeanDefinitionReader的registerBeanDefinitions&#xff08;doc,resource&#xff09;開始 1 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) 2 throws BeanDefinitionStoreException { 3 try { 4 …

leetcode968. 監控二叉樹(dfs)

給定一個二叉樹&#xff0c;我們在樹的節點上安裝攝像頭。 節點上的每個攝影頭都可以監視其父對象、自身及其直接子對象。 計算監控樹的所有節點所需的最小攝像頭數量。 輸入&#xff1a;[0,0,null,0,0] 輸出&#xff1a;1 解釋&#xff1a;如圖所示&#xff0c;一臺攝像頭足…

linux系統部署war包,查看tomcat日志

1.部署war包app/tomcat/bin在tomcat/bin 目錄下啟動 .startup.sh&#xff0c;在啟動過程中tomcat會對war包進行解壓&#xff0c;形成相應的項目目錄 執行命令&#xff1a;./startup.sh 2.實時查看tomcat的日志。首先需要到tomcat的日志目錄下。我的目錄供你參考app/tomcat/logs…

代碼編寫工具_這些工具將幫助您編寫簡潔的代碼

代碼編寫工具看一下Prettier&#xff0c;ESLint&#xff0c;Husky&#xff0c;Lint-Staged和EditorConfig (A look at Prettier, ESLint, Husky, Lint-Staged and EditorConfig) Learning to write good code, but you don’t know where to start… Going through style-guide…

使用kibana和elasticsearch日志實時繪制圖表

前言&#xff1a; 此文接的是上篇&#xff0c;上次的內容是&#xff0c;用python操作elasticsearch存儲&#xff0c;實現數據的插入和查詢。 估計有些人一看我的標題&#xff0c;以為肯定是 logstash kibana elasticsearch的組合。這三個家伙也確實總是勾搭在一塊。 其實logst…

android中設置菜單欄,android – 菜單項沒有顯示在操作欄

我做了一個全新的項目。我已經添加了項目到菜單布局文件。這些項目不會顯示在操作欄的右側。我記得一個有三個點的圖標顯示出來&#xff0c;打開菜單。這里是我的活動public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState)…

leetcode617. 合并二叉樹(dfs)

給定兩個二叉樹&#xff0c;想象當你將它們中的一個覆蓋到另一個上時&#xff0c;兩個二叉樹的一些節點便會重疊。你需要將他們合并為一個新的二叉樹。合并的規則是如果兩個節點重疊&#xff0c;那么將他們的值相加作為節點合并后的新值&#xff0c;否則不為 NULL 的節點將直接…

conda使用報錯:ImportError:DLL load failed

conda安裝python環境經常報&#xff1a; ImportError:DLL load failed 將環境變量加入path可以解決&#xff1a; D:\program\anaconda D:\program\anaconda\Scripts D:\program\anaconda\Library\bin 轉載于:https://www.cnblogs.com/timlong/p/11122805.html

《程序員修煉之道》筆記(八)

第八章 注重實效的項目 隨著你的項目開動&#xff0c;我們需要從個體的哲學和編碼問題轉向討論更大的、項目級的問題。我們將不深入項目管理的具體細節&#xff0c;而是要討論能使項目成功或失敗的幾個關鍵區域。 1. 注重實效的團隊 書中前面的內容都是幫助個體成為更好的程序員…

android 網絡調試 源代碼,Android源代碼調試環境搭建

我們在調試Android應用程序的時候&#xff0c;有時候遇到一些莫名其妙的問題&#xff0c;因此我們需要查看Android內部是如何調用的。我們都知道Android是一個偉大的開源項目&#xff0c;因此debug的時候肯定是支持源代碼級別調試的。采用源代碼調試&#xff0c;一方面有利于發…