数据结构与算法练习57

有效的数独

在这里插入图片描述

解题思路:

三次遍历。一次找行,一次找列,一次找9宫格。主要是9宫格如何确定i,j的初始值,可以看出横竖都只有三个9宫格,且分别开始数为0,3,6,为0,1,2的三倍,所以用m,n来确定i,j的取值。

代码:

        public bool IsValidSudoku(char[][] board)
        {
            bool result = true;
            for(int i=0;i<9;i++)
            {
                List<int> lgx = new List<int>();
                for(int j=0;j<9;j++)
                {
                    if(board[i][j]>'0'&&board[i][j]<='9')
                    {
                        if (lgx.Contains(board[i][j]))
                            return false;
                        else lgx.Add(board[i][j]);
                    }
                }
            }//验证行是否满足。
            for (int i = 0; i < 9; i++)
            {
                List<int> lgx = new List<int>();
                for (int j = 0; j < 9; j++)
                {
                    if (board[j][i] > '0' && board[j][i] <= '9')
                    {
                        if (lgx.Contains(board[j][i]))
                            return false;
                        else lgx.Add(board[j][i]);
                    }
                }
            }//验证列是否满足。
            for(int m=0;m<3;m++)
            {
                for(int n=0;n<3;n++)
                {                                       
                    List<int> lgx = new List<int>();
                    for(int i = 3 * m;i<(3*m)+3;i++)
                    {
                        for(int j = 3 * n;j<(3*n)+3;j++)
                        {
                            if (board[i][j] > '0' && board[i][j] <= '9')
                            {
                                if (lgx.Contains(board[i][j]))
                                    return false;
                                else lgx.Add(board[i][j]);
                            }
                        }
                    }
                }
            }//验证每一个9*9是否满足。m,n用来确定i,j的取值。
            return result;
        }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值