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

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

上图是一个部分填充的有效的数独。

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

示例 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

看见这道题我觉得应该能做出来,因为我做过五子棋,也是自己研究的数组棋盘遍历,感觉差不多

然而,没想到,做出来就用了我小半个下午的时间,并且用的也是很笨的遍历办法…

var isValidSudoku = function (board) {
//横向遍历
for (let i = 0; i !== 9; i++) {
let temp = board[i].filter(value => value !== ".");
if (new Set(temp).size !== temp.length) {
return false;
}
}
//纵向遍历
for (let i = 0; i !== 9; i++) {
let temp = board.map(value => value.filter((value, index) => index === i)).map(value => value[0]).filter(value => value !== ".");
if (new Set(temp).size !== temp.length) {
return false;
}
}
//3x3宫格遍历
for (let i = 0; i < 9; i += 3) {
//先分为3个9x3的
let temp = board.map(value => value.filter((value, index) => index >= i && index < i + 3)).filter(value => value !== ".");
//再把9x3分成3个3x3
for (let j = 0; j < 9; j += 3) {
//转为1维数组去重判断长度
let temp_3x3 = temp.filter((value, index) => index >= j && index < j + 3).join(",").split(",").filter(value => value !== ".");
if (new Set(temp_3x3).size !== temp_3x3.length) {
return false;
}
}
}
return true;
};

方法是很笨的硬莽干

最新文章

  1. hibernate学习四(关系映射一对一与组件映射)
  2. 3.Powershell编辑器
  3. Android下添加新的自定义键值和按键处理流程
  4. MySQL知识总结
  5. struts+service+action+数据库
  6. 欧几里得证明$\sqrt{2}$是无理数
  7. Linux下ll命令与ls -l
  8. [Angular 2] Create template with Params
  9. Debug Intro
  10. PHP获取时间日期的多种方法
  11. Eclipse代码自动提示设置
  12. 为 Jenkins 配置 .Net 持续集成环境
  13. IOS缓存管理之YYCache使用
  14. html知识点汇总(持续更新中)
  15. Tensorflow训练和预测中的BN层的坑
  16. webapi返回泛型给easyui
  17. Jira客户端
  18. R(4) read/write
  19. NO--16 vue之父子组件传值
  20. TIAGo ROS模拟教程2 - 自主机器人导航

热门文章

  1. C#获取外网IP、本机MAC地址及Ping的实现
  2. Eclipse 异常关闭
  3. slf4j日志框架
  4. java web 读取配置文件两种方法
  5. python&#39;s is&amp;==区别
  6. laravel phpstorm IDE 代码提示
  7. 【HDU2825】Wireless Password【AC自动机,状态压缩DP】
  8. Alpha混合
  9. SpringData JPA整理
  10. CentOS搭建VSFTP服务器