问题描述:给定9x9矩阵,看是是否是有效数独,不用全部都填上数字,可以为.

算法分析:这道题就是判断,不难,有效数独三个充分条件,行,列,3*3子矩阵,都要满足数字不能重复。

 public boolean isValidSudoku(char[][] board)
{
if(board == null || board.length != 9 || board[0].length != 9)
{
return false;
} //判断行
for(int i = 0; i < 9; i ++)
{
boolean[] m = new boolean[9];
for(int j = 0; j < 9; j ++)
{
if(board[i][j] != '.')
{
//if(m[(int)board[i][j]])这样写是错误的,因为(int)'1'不等于1.
if(m[(int)(board[i][j]-'1')])
{
return false;
}
m[(int)(board[i][j]-'1')] = true;
}
}
} //判断列
for(int i = 0; i < 9; i ++)
{
boolean[] m = new boolean[9];
for(int j = 0; j < 9; j ++)
{
if(board[j][i] != '.')
{
if(m[(int)(board[j][i]-'1')])
{
return false;
}
m[(int)(board[j][i]-'1')] = true;
}
}
} //判断3*3矩阵,总共有9个
for(int k = 0; k < 9; k ++)
{
boolean[] m = new boolean[9];
for(int i = k/3*3; i < k/3*3 + 3; i ++)
{
for(int j = k%3*3; j < k%3*3 + 3; j ++)
{
if(board[i][j] != '.')
{
if(m[(int)(board[i][j]-'1')])
{
return false;
}
m[(int)(board[i][j]-'1')] = true;
}
}
}
} return true;
}

还有一种方法,就是直接用set集合,判断元素是否重复。

 public boolean isValidSudoku(char[][] board) {
for(int i = 0; i < 9; i ++)
{
Set<Character> set = new HashSet<>();
for(int j = 0; j < 9; j ++)
{
if(board[i][j] != '.')
{
if(set.contains(board[i][j]))
{
return false;
}
set.add(board[i][j]);
}
}
set.clear();
} for(int i = 0; i < 9; i ++)
{
Set<Character> set = new HashSet<>();
for(int j = 0; j < 9; j ++)
{
if(board[j][i] != '.')
{
if(set.contains(board[j][i]))
{
return false;
}
set.add(board[j][i]);
}
}
set.clear();
} for(int k = 0; k < 9; k ++)
{
Set<Character> set = new HashSet<>();
for(int j = k/3*3; j < k/3*3+3; j ++)
{
for(int i = k%3*3; i < k%3*3+3; i ++)
{
if(board[j][i] != '.')
{
if(set.contains(board[j][i]))
{
return false;
}
set.add(board[j][i]);
}
}
}
set.clear();
} return true;
}

Valid sudoku, 是否是有效的数独的更多相关文章

  1. 36. Valid Sudoku 判断九九有效的数独

    [抄题]: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according ...

  2. LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)

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

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

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

  4. leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题

    三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku ...

  5. valid sudoku(数独)

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

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

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

  7. LeetCode 36 Valid Sudoku

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

  8. 36. Valid Sudoku

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

  9. 【LeetCode题意分析&解答】36. Valid Sudoku

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

随机推荐

  1. 滚动插件 animatescroll(可以设置要滚动到位置)

     1. 引入   <script src="js/animatescroll.js"></script> 2.设置要滚动到的位置  $('目标位置').an ...

  2. OC处理.Net Json时间格式

    通过服务器收到的json时间格式是/Date(xxxxxxxxxxxxx+xxxx)/,其中前半部分是自1970年的millionSecs,后半部是时区,我们需要对齐进行转换. 解决方式有两种,第一种 ...

  3. 自动适应label

    CGFloat btnH = 300; NSString *text=@"你在这是NSString的对象方法,一个字符串实例调用该方法时,方法会通过传入的参数返回一个CGRect型数据,这个 ...

  4. LIMIT Query Optimization

    LIMIT limitFrom , perPageNum LIMIT offset, size MySQL :: MySQL 8.0 Reference Manual :: 13.2.10 SELEC ...

  5. 【我的Android进阶之旅】解决错误:No enum constant com.android.build.gradle.OptionalCompilationStep.FULL_APK

    今天在分支编译代码并允许之后,接着同步主干代码之后,再继续点击[Run]按钮允许程序的时候报错了,错误描述日志如下所示: 一.错误描述 Error:(1, 1) A problem occurred ...

  6. 教你高速入门Excel-宏与VBA(续)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/small_baby01/article/details/24028407 引言         通过 ...

  7. 1.Oracle数据库查看用户锁表和对表解锁的sql语句

    ① 查看用户锁表 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.lock ...

  8. 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】

    一.概述 官方原文地址 Writing Your First Application如果对fabric网络的基本运行机制不熟悉的话,请看这里. 注意:本教程是对fabric应用以及如何使用智能合约的简 ...

  9. 基于视觉反馈的步进电机X-Y平台控制

    关键词:步进电机.XY平台.视觉反馈 用途:工业自动化 文章类型:原理介绍.随笔纪念 @Author:VShawn(singlex@foxmail.com) @Date:2017-05-01 @Lab ...

  10. 爬虫任务二:爬取(用到htmlunit和jsoup)通过百度搜索引擎关键字搜取到的新闻标题和url,并保存在本地文件中(主体借鉴了网上的资料)

    采用maven工程,免着到处找依赖jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...