Valid Sudoku

class Solution {
public:
    bool isLineOk(vector<char> &board){
	//1到9,没有重复
	map<char,int> roman;
	roman['1']=0;
	roman['2']=0;
	roman['3']=0;
	roman['4']=0;
	roman['5']=0;
	roman['6']=0;
	roman['7']=0;
	roman['8']=0;
	roman['9']=0;
	for (int i = 0; i < board.size(); i++)
	{
		if(board[i]>='1'&&board[i]<='9'){
			if (roman[board[i]]==1)
				return false;
			roman[board[i]]++;
		}
		else if(board[i]!='.'){
			return false;
		}
	}
	return true;
}
bool isValidSudoku(vector<vector<char> > &board) {
	int size=board.size();
	//行
	for (int i=0;i<size;i++)
	{
		if(!isLineOk(board[i]))
			return false;
	}
	//列
	for (int i=0;i<size;i++)
	{
		vector<char> tmp;
		for (int j=0;j<size;j++)
		{
			tmp.push_back(board[j].at(i));
		}
		if(!isLineOk(tmp))
			return false;
		tmp.clear();
	}
	//方格
	int A[]={0,3,6};

	for (int i=0;i<3;i++)
	{
		for (int j=0;j<3;j++)
		{
			//行A[i] 列A[j] 初始位置
			vector<char> tmp;
			for (int m=0;m<3;m++)
			{
				for (int n=0;n<3;n++)
				{
					tmp.push_back(board[A[i]+m].at(A[j]+n));
				}
			}
			if(!isLineOk(tmp))
				return false;
			tmp.clear();
		}
	}
	return true;
}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值