日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LintCode 802. 数独(回溯)/ LeetCode 37. 解数独

發布時間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LintCode 802. 数独(回溯)/ LeetCode 37. 解数独 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

編寫一個程序,通過填充空單元來解決數獨難題。
空單元由數字0表示。
你可以認為只有一個唯一的解決方案。

LeetCode 37 題類似,把 int 改成 char,注意轉換

2. 解題

  • 行、列、小9宮格內 1-9 都只出現一次
  • 暴力回溯,坐標轉換
class Solution {vector<vector<int>> ans; public:void solveSudoku(vector<vector<int>> &b) {dfs(b,0);b = ans;}void dfs(vector<vector<int>> &b, int idx){if(idx > 80){ans = b;return;}int i = idx/9, j = idx%9;//idx是序號,轉換成行列標號if(b[i][j] != 0)dfs(b,idx+1);//數字是已給的,跳過else{for(int k = 1; k <= 9; ++k){ //遍歷9個數字if(isok(b,i,j,k)){ //數字 k 在當前格子合法b[i][j] = k;dfs(b,idx+1);b[i][j] = 0;}}}}bool isok(vector<vector<int>> &b, int i, int j, int& num){ int box_i, box_j;box_i = i/3, box_j = j/3;//行列坐標算出小9宮格的坐標for(int k = 0; k < 9; ++k){ //遍歷9個格子,行的,列的,9 宮格內的,都不能出現過 numif(b[i][k]==num || b[k][j]==num || b[box_i*3+k/3][box_j*3+k%3]==num)return false;}return true;} };

100% 數據通過測試
總耗時 273 ms
您的提交打敗了 55.71% 的提交!

總結

以上是生活随笔為你收集整理的LintCode 802. 数独(回溯)/ LeetCode 37. 解数独的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。