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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

有效的数独

發(fā)布時(shí)間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 有效的数独 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

判斷一個(gè)?9x9 的數(shù)獨(dú)是否有效。只需要根據(jù)以下規(guī)則,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可。

  • 數(shù)字?1-9?在每一行只能出現(xiàn)一次。
  • 數(shù)字?1-9?在每一列只能出現(xiàn)一次。
  • 數(shù)字?1-9?在每一個(gè)以粗實(shí)線分隔的?3x3?宮內(nèi)只能出現(xiàn)一次。
  • 上圖是一個(gè)部分填充的有效的數(shù)獨(dú)。

    數(shù)獨(dú)部分空格內(nèi)已填入了數(shù)字,空白格用?'.'?表示。

    ?

    示例?1:

    輸入: [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"] ] 輸出: true

    示例?2:

    輸入: [["8","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"] ] 輸出: false 解釋: 除了第一行的第一個(gè)數(shù)字從 5 改為 8 以外,空格內(nèi)其他數(shù)字均與 示例1 相同。但由于位于左上角的 3x3 宮內(nèi)有兩個(gè) 8 存在, 因此這個(gè)數(shù)獨(dú)是無效的。

    說明:

    • 一個(gè)有效的數(shù)獨(dú)(部分已被填充)不一定是可解的。
    • 只需要根據(jù)以上規(guī)則,驗(yàn)證已經(jīng)填入的數(shù)字是否有效即可。
    • 給定數(shù)獨(dú)序列只包含數(shù)字?1-9?和字符?'.'?。
    • 給定數(shù)獨(dú)永遠(yuǎn)是?9x9?形式的。

    這道題不難,關(guān)鍵是知道 二維數(shù)組的分布規(guī)律就行

    ?

    我解決的比較暴力? 下面是代碼。

    兩種思路,一種犧牲 內(nèi)存換時(shí)間,創(chuàng)建3 個(gè)列表 來存 上面規(guī)定的3種規(guī)則。遇到數(shù)字就存進(jìn)去,進(jìn)去前判斷是否以及飽含了,沒包含就 存 進(jìn)去 有包含 就返回false;

    規(guī)律比較難尋的是 9個(gè) 3*3的小矩陣。

    摸索下還是可以找到的。

    public bool IsValidSudoku(char[,] board) { //思路2 3個(gè)列表 //思路1for(int i=0;i<9;i++){for(int j=0;j<9;j++){for(int k=0;k<9;k++){// 行 比較if (board[i,j]!='.'&&board[i,j]==board[i,k]&&j!=k){ return false;}//列的比較if (board[j,i]==board[k,i]&&j!=k&&board[k,i]!='.'){ Console.Write(board[j,i]);return false;} }}}List<char> vs = new List<char>(); //左三個(gè)for (int i = 0; i < 9; i++){ for (int j = 0; j <3; j++){if(board[j, i]!='.'){if(vs.Contains(board[j, i])){return false;}else{vs.Add(board[j, i]);}}}if ((i + 1) % 3 == 0){vs.Clear();}}//中三個(gè) for (int i = 0; i < 9; i++){for (int j = 3; j < 6; j++){if(board[j, i]!='.'){if(vs.Contains(board[j, i])){return false;}else{vs.Add(board[j, i]);}}}if ((i + 1) % 3 == 0){vs.Clear();}}//右三個(gè) for (int i = 0; i < 9; i++){for (int j = 6; j < 9; j++){if(board[j, i]!='.'){if(vs.Contains(board[j, i])){return false;}else{vs.Add(board[j, i]);}}}if ((i + 1) % 3 == 0){vs.Clear();}}return true;}

    ?

    后來又遇到這個(gè)題目,又有了第二版...簡(jiǎn)潔了不少.

    public bool IsValidSudoku(char[][] board) {int[] numsRow =new int[9];int[] numsColumn = new int[9];int[][] numsGrids = new int[][]{new int[9],new int[9],new int[9],};for (int y= 0; y <9; y++) // 1 ~ 9{for (int x = 0; x <9; x++) //1~9{if (board[y][x]!='.'){if (! CheckNums(board, numsRow, y, x)){return false;}//numsRow}if (board[x][y]!= '.'){if (!CheckNums(board, numsColumn, x, y)){return false;}}int index = (x) / 3;if (board[y][x] != '.'){if (!CheckNums(board, numsGrids[index], y, x)){return false;} }if ((y+1)%3==0&&(x+1)%3==0){numsGrids[index] = new int[9];}//計(jì)算清空 時(shí)機(jī)}numsRow = new int[9];numsColumn = new int[9];//進(jìn)行 清空}return true;}bool CheckNums(char[][] board,int [] numsRow, int y,int x){int index = (int)board[y][x] - 49;if (numsRow[index] == 1){return false;}numsRow[index] = 1;return true;}

    ?

    總結(jié)

    以上是生活随笔為你收集整理的有效的数独的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。