
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
上图是一个部分填充的有效的数独。
数独部分空格内已填入了数字,空白格用 '.' 表示。
示例 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
示例 2:
输入:
[
["8","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"]
]
输出: false
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。
但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
说明:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
给定数独序列只包含数字 1-9 和字符 '.' 。
给定数独永远是 9x9 形式的。
就是按照题意 , 来校验是否满足3个条件 ,有2个需要注意的地方,
校验的时候可以借助hash表来优化,也可以生9个桶,有数据就放进去,无数据就是0, 这样的读写操作都是O(1), (还有人用位运算优化的,好吧.)
求解3*3的小方格,需要稍微观察一下,找下规律.
#import <Foundation/Foundation.h>// 测试用例1 , 是数独
char board1[9][9] = {{'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'}
};// 测试用例2 , 横向不合法
char board2[9][9] = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','1','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}
};// 测试用例3 , 纵向不合法
char board3[9][9] = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'4','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}
};// 测试用例4 , 小方格不合法
char board4[9][9] = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','6','8','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}
};BOOL checkBoard(char board[9][9]) {NSMutableArray <NSMutableDictionary *>* xArray = [NSMutableArray array];NSMutableArray <NSMutableDictionary *>* yArray = [NSMutableArray array];NSMutableArray <NSMutableDictionary *>* boxArray = [NSMutableArray array];for (int i = 0; i<9; i++) {NSMutableDictionary * xDic = [NSMutableDictionary dictionary];[xArray addObject:xDic];NSMutableDictionary * yDic = [NSMutableDictionary dictionary];[yArray addObject:yDic];NSMutableDictionary * boxDic = [NSMutableDictionary dictionary];[boxArray addObject:boxDic];}for (int y = 0; y<9; y++) {for (int x = 0; x<9; x++) {char item = board[y][x];if (item == '.') {continue;}NSString * key = [NSString stringWithFormat:@"%c",item];// 检测横向NSMutableDictionary * xDic = xArray[x];if (xDic[key] != nil) {return NO;}xDic[key] = key;// 检测竖向NSMutableDictionary * yDic = yArray[y];if (yDic[key]!=nil) {return NO;}yDic[key] = key;// 检测小方格int boxIndex = y/3*3+x/3;NSMutableDictionary * boxDic = boxArray[boxIndex];if (boxDic[key] != nil) {return NO;}boxDic[key] = key;}}return YES;
}int main(){NSLog(@"数独是否有效 -- %d",checkBoard(board1));NSLog(@"数独是否有效 -- %d",checkBoard(board2));NSLog(@"数独是否有效 -- %d",checkBoard(board3));NSLog(@"数独是否有效 -- %d",checkBoard(board4));}
本文发布于:2024-02-02 16:12:16,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170686153444934.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |