LeetCode_36---Valid Sudoku

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 '.'.


A partially filled sudoku which is valid.

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

Hide Tags    Hash Table

Code:

/**
 * 
 */
package From21;

import java.util.Arrays;

/**
 * @author MohnSnow
 * @time 2015年6月16日 下午2:49:18
 * 
 */
public class LeetCode36 {

	/**
	 * @param argsmengdx
	 *            -fnst
	 */
	//400msA ---  原文地址---http://blog.csdn.net/china_wanglong/article/details/39233899
	public static boolean isValidSudoku(char[][] board) {
		boolean[] visited = new boolean[10];
		//row  
		for (int i = 0; i < 9; i++) {
			Arrays.fill(visited, false);
			for (int j = 0; j < 9; j++) {
				if (!check(visited, board[i][j])) {
					return false;
				}
			}
		}
		//col  
		for (int i = 0; i < 9; i++) {
			Arrays.fill(visited, false);
			for (int j = 0; j < 9; j++) {
				if (!check(visited, board[j][i])) {
					return false;
				}
			}
		}
		//sub matrix  
		for (int i = 0; i < 9; i += 3) {
			for (int j = 0; j < 9; j += 3) {
				Arrays.fill(visited, false);
				for (int k = 0; k < 9; k++) {
					if (!check(visited, board[i + k / 3][j + k % 3])) {
						return false;
					}
				}
			}
		}
		return true;
	}

	public static boolean check(boolean[] visited, char c) {
		if (c == '.') {
			return true;
		}
		int num = c - '0';
		if (num < 1 || num > 9 || visited[num]) {
			return false;
		} else {
			visited[num] = true;
		}
		return true;
	}

	public static void main(String[] args) {
		char[][] board = {
				{ '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' }
		};
		System.out.println("寻找插入:" + Arrays.toString(board));
		System.out.println("寻找插入:" + isValidSudoku(board));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值