美文网首页
36.有效的数独

36.有效的数独

作者: 织毛衣的手 | 来源:发表于2018-05-16 11:07 被阅读0次

LeetCode 的算法题 PHP解法记录

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

<small>上图是一个部分填充的有效的数独。</small>

数独部分空格内已填入了数字,空白格用 '.' 表示。

示例 1:

<pre>输入:

  array(
["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
</pre>

示例 2:

<pre>输入:

array(
["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
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。
但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。</pre>

说明:

  • 一个有效的数独(部分已被填充)不一定是可解的。
  • 只需要根据以上规则,验证已经填入的数字是否有效即可。
  • 给定数独序列只包含数字 1-9 和字符 '.'
  • 给定数独永远是 9x9 形式的。

解:先写解 得一分

function du($arr){
    // 横竖 验证
    for($i=0;$i<9;$i++){
        $heng=array();
        $shu=array();
        for($j=0;$j<9;$j++){
            if($arr[$i][$j] != '.'){
                $heng[] = $arr[$i][$j];
            }   
            if($arr[$j][$i] != '.'){
                $shu[] = $arr[$j][$i];// 也许我应该用col 和 row 但是我相信 世界是英文的也是中文的,最终一定是拼音的 =。=
            }   
        }
        if(count($heng) != count(array_unique($heng))){
            echo '横排'.$j.'有重复数字';
        }
        if(count($shu) != count(array_unique($shu))){
            echo '竖排'.$i.'有重复数字';
        }
    }
    // 九格验证
    for($m=0;$m<9;$m+=3){   
        for($n=0;$n<9;$n+=3){
            $box = array();
            for ($i = $m; $i < $m+3; $i++) {
                for ($j = $n; $j < ($n+3); $j++) {
                    if ($arr[$i][$j] != '.') {
                        $box[] = $arr[$i][$j];
                    }
                }
            }
            if (count($box) != count(array_unique($box))) {
                echo '盒子中有重复数字';
            }
        }
    }   
}

相关文章

  • Leetcode-36 有效的数独

    36. 有效的数独[https://leetcode-cn.com/problems/valid-sudoku/]...

  • 36.有效数独

    利用矩阵来记录是否出现过 以 row[9][9] 为例,第一个是代表第几行,第二个则是代表第几个数,初始化全为0,...

  • 36. 有效的数独

    36. 有效的数独(难度:中等) 题目链接:https://leetcode-cn.com/problems/va...

  • 《每周一道算法题》(九)有效的数独

    一 题目 36. 有效的数独 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可...

  • leetcode 初级之数组篇 10

    36.有效的数独 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1...

  • 36.有效的数独

    题目判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行...

  • 36.有效的数独

    LeetCode 的算法题 PHP解法记录 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数...

  • 36. 有效的数独

    一、题目原型: 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-...

  • 36. 有效的数独

    自己解法 这个题,思路就是遍历一遍,分别判断每行,每列每个小九宫格是否包含重复数据,因为是逐行遍历,遍历行重建行的...

  • 36. 有效的数独

    判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出...

网友评论

      本文标题:36.有效的数独

      本文链接:https://www.haomeiwen.com/subject/imqpdftx.html