题目:

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

![这里写图片描述](http://img.blog.csdn.net/20160409183641502)
A partially filled sudoku which is valid.

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

思路:

  • 首先这是一道数独题目,关于数独的性质,可以参考下面的链接

    数独规则

  • 考虑根据数独的各个条件来逐个解决,需要判断每行,每一列,以及每个小方格是否是1~9,出现一次,思路是建立一个list添加,判断是否出现重复,出现返回false;同样如果board == null,或者行数和列数不等于9,也返回false

  • -

代码:

public class Solution {
    public boolean isValidSudoku(char[][] board) {
        ArrayList<ArrayList<Character>> rows = new ArrayList<ArrayList<Character>>();
        ArrayList<ArrayList<Character>> cols = new ArrayList<ArrayList<Character>>();
        ArrayList<ArrayList<Character>> boxs = new ArrayList<ArrayList<Character>>();
        if(board == null || board.length != 9|| board[0].length != 9){
            return false;
        }
        for(int i = 0;i < 9;i++){
            rows.add(new ArrayList<Character>());
            cols.add(new ArrayList<Character>());
            boxs.add(new ArrayList<Character>());
        }
        for(int a = 0;a < board.length;a++){
            for(int b = 0;b < board[0].length;b++){
                if(board[a][b] == '.'){
                    continue;
                }
                ArrayList<Character> row = rows.get(a);
                if(row.contains(board[a][b])){
                    return false;
                }else{
                    row.add(board[a][b]);
                }
                ArrayList<Character> col = cols.get(b);
                if(col.contains(board[a][b])){
                    return false;
                }else{
                    col.add(board[a][b]);
                }
                ArrayList<Character> box = boxs.get(getNum(a,b));
                if(box.contains(board[a][b])){
                    return false;
                }else{
                    box.add(board[a][b]);
                }
            }
        }return true;
    }
    public int getNum(int i,int j){
        return (i/3)*3+j/3;
    }
}

LeetCode(38)-Valid Sudoku的更多相关文章

  1. [LeetCode] 036. Valid Sudoku (Easy) (C++)

    指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 036. ...

  2. LeetCode:36. Valid Sudoku,数独是否有效

    LeetCode:36. Valid Sudoku,数独是否有效 : 题目: LeetCode:36. Valid Sudoku 描述: Determine if a Sudoku is valid, ...

  3. LeetCode 36 Valid Sudoku

    Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...

  4. 【leetcode】Valid Sudoku

    题目简述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  5. Java [leetcode 36]Valid Sudoku

    题目描述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  6. [leetcode] 20. Valid Sudoku

    这道题目被放在的简单的类别里是有原因的,题目如下: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. ...

  7. 蜗牛慢慢爬 LeetCode 36.Valid Sudoku [Difficulty: Medium]

    题目 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  8. leetCode 36.Valid Sudoku(有效的数独) 解题思路和方法

    Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...

  9. LeetCode 036 Valid Sudoku

    题目要求:Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudo ...

随机推荐

  1. VS2008界面语言设置

    在卸载某个软件的时候,不知道什么原因导致vs2008的界面变成中文的了,但是菜单还是英文的,很不美观. 几经查找,最后可以在如下的地方设置界面语言 Tools -> Options 如果设置成 ...

  2. UE4联机烘焙

    联机烘焙就是为了利用多台电脑解决烘焙效率的问题 1.UE4的烘焙工具在安装目录下的\Engine\Binaries\DotNET,比如我这里是E:\UnrealEngine-release\Engin ...

  3. Web开发学习之路--Eclipse+Tomcat+mysql之初体验

    学习了一段时间android,正好要用到android和服务器之间的交互,既然要学习android,那么就涉猎下服务器端的开发了,以前学过php,用thinkphp很快可以搭建起来,但是android ...

  4. 学习TensorFlow,concat连接两个(或多个)通道

    深度学习中,我们经常要使用的技术之一,连接连个通道作为下一个网络层的输入,那么在tensorflow怎么来实现呢? 我查看了tensorflow的API,找到了这个函数: tf.concat(conc ...

  5. Hibernate 缓存机制全面讲解

    简介 为了降低应用程序访问我们的数据的时候的频率,提高数据读取的速率.比如计算机中为了缓解CPU和内存之间速度差异而引入的缓存是一样的道理.Hibernate同样对缓存进行了支持,使得程序的运行效率得 ...

  6. 你不可不知的Eclipse快捷键

    我们都知道Eclipse是一个深受广大程序员喜爱的编译器,其插件机制更是让人拜服.它之所以这么被人喜爱,除了这些,最重要的是它丰富的快捷键.那么今天,我就来分享一下我平时经常使用的一些快捷键. Ctr ...

  7. python使用qq服务器发送邮件

    python使用qq服务器发送邮件 直接上代码: #!/usr/bin/python2.7 #-*- coding: UTF-8 -*- # sendmail.py # # init created: ...

  8. 任务执行器——Executor

    上节说到接收器Acceptor在接收到socket后会有一系列简单的处理,其中将socket扔进线程池是最重要的一步,线程池是一个怎样东西?其原理在前面的"线程池原理"章节已经说明 ...

  9. 老司机带你玩转web service

    当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来.毕竟是多家不同的公司的产品,研发开发语言.采用技术框架基本上是百花齐放.怎样让自家系统提供的服务具有跨平台.跨语言.跨各种防火墙 ...

  10. Android官方技术文档翻译——Apk 拆分机制

    本文译自androd官方技术文档<Apk Splits>,原文地址:http://tools.android.com/tech-docs/new-build-system/user-gui ...