zoukankan      html  css  js  c++  java
  • leetcode刷题笔记三十六 有效的数独

    leetcode刷题笔记三十六 有效的数独

    源地址:36. 有效的数独

    问题描述:

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

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

    知识补充:

    本题主要是保证行、列、宫内无重复数据,说到重复数据,很容易让人联想到数据结集合或者hashmap等,这里补充一下Set与Hash Set的相关知识。

    Set是一种最简单集合。集合中元素不按特定方式排序,且没有重复对象。Scala提供了两个子特质,一个用于不可变集合,一个用于可变集合。

    一些常见的集合操作:

    //定义集合
    val aSet = Set(1,2,3,4)
    val bSet = Set(5,6,7,8)
    //集合拼接
    val abSet = aSet + bSet
    
    //定义HashSet
    import scala.collection.mutable.HashSet
    val cSet = new HashSet[Int]()
    //添加
    cSet += 1
    cSet.add(2)
    //删除
    cSet -= 2
    cSet.remove(1)
    //不存在即添加
    cSet.update(2,true)
    

    代码补充:

    //将位置与值结合成字符串,分别表示行、列、宫
    //将他们插入HashSet,如果无法成功添加即说明已存在
    import scala.collection.mutable.HashSet 
    object Solution {
        def isValidSudoku(board: Array[Array[Char]]): Boolean = {
            val newSet = new HashSet[String]()
            for(i <- 0 until 9){
                for(j <- 0 until 9){
                    if(board(i)(j) != '.'){
                        val iRow = "(" + i + ") " + board(i)(j)
                        val jcol = board(i)(j) + "(" + j + ") " 
                        val squarl = "(" + i/3 + "," + j/3 +") " + board(i)(j)
                        println("----------------------------------")
                        println("iRow: "+iRow)
                        println("jcol: "+jcol)
                        println("squarl: "+squarl)
                        if(!newSet.add(iRow) || !newSet.add(jcol) || !newSet.add(squarl)) return false
                    }
                }
            }
            return true
        }
    }
    
  • 相关阅读:
    第二代:晶体管计算机
    第一代计算机
    Android应用在不同版本间兼容性处理
    eventBus
    realm
    ijkplayer详解AAA
    USB 3.0规范中译本 第3章 USB 3.0体系结构概览
    ES6 学习笔记
    07_通过上下文获取常见目录
    06_登陆案例保存信息完成
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/12878150.html
Copyright © 2011-2022 走看看