力扣原题《有效的数独游戏》,纯手搓,已验证
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。请参考示例图注意一个有效的数独部分已被填充不一定是可解的。只需要根据以上规则验证已经填入的数字是否有效即可。空白格用 ‘.’ 表示。示例 1输入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”]]输出true示例 2输入board [[“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 存在, 因此这个数独是无效的。提示board.length 9board[i].length 9board[i][j] 是一位数字1-9或者 ‘.’我的答案classValidSuduku{public:boolisValidSudoku(vectorvectorcharboard){//本元素在行或列中是否出现过boolisValidtrue;for(inti0;iboard.size();i){for(intj0;jboard.size();j){//其中一个for如何省掉charownboard[i][j];if(own!.){for(intm0;mboard.size();m){if((m!iownboard[m][j])||(m!jownboard[i][m])){isValidfalse;break;}}}if(!isValid)break;}if(!isValid)break;}returnisValid;}};intmain(){vectorvectorvectorcharboards;chararrayBoards1[][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}};chararrayBoards2[][9]{{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}};vectorvectorcharboards1(9,vectorchar(9));vectorvectorcharboards2(9,vectorchar(9));for(inti0;i9;i){//此处耗时memcpy(boards1[i][0],arrayBoards1[i][0],9*sizeof(char));}for(inti0;i9;i){//此处耗时memcpy(boards2[i][0],arrayBoards2[i][0],9*sizeof(char));}boards.push_back(boards1);boards.push_back(boards2);ValidSuduku validSuduku;for(inti0;iboards.size();i){std::cout已填入的数字是否有效:(validSuduku.isValidSudoku(boards[i])0?False:True)std::endl;}boards1.clear();boards1.shrink_to_fit();boards2.clear();boards2.shrink_to_fit();boards.clear();boards.shrink_to_fit();}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2455830.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!