Leetcode_valid-sudoku

地址:http://oj.leetcode.com/problems/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 '.'.

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


csdn是不是老抽风啊,一点都不稳定,博客昨晚上都写好了,一直发不了,编辑也丢失了。有几次进博客的页面都是另外一个,难道是灰度上线?

思路:刚开始没看清楚题意。这题只要验证给出数字是否合理就行,关于某个给出的数字是否是合理的,从下面三个方面来判断:

1. 所在行是否有重复数字

2.所在列是否有重复数字

3.所在9字宫格是否有重复数字

以上三条都满足说明该数数字在该位置是合理的。

参考代码:

class Solution {
public:
    bool is_fill(vector<vector<char>>&board, int row, int col, char ch)
    {
        for(int i = 0; i<9; ++i)
        {
            if((i!=row && board[i][col]==ch)||(i!=col && board[row][i]==ch))
                return false;
        }
        int left_row, left_col, right_row, right_col;
        if(row % 3 ==2)
        {
            left_row = row-2;
            right_row = row;
        }
        else if(row % 3 ==1)
        {
            left_row = row-1;
            right_row = row+1;
        }
        else
        {
            left_row = row;
            right_row = row+2;
        }
        
        if(col % 3 ==2)
        {
            right_col = col;
            left_col = col-2;
        }
        else if(col % 3 ==1)
        {
            left_col = col-1;
            right_col = col+1;
        }
        else
        {
            left_col = col;
            right_col = col + 2;
        }
        for(int i = left_row; i<=right_row; ++i)
            for(int j = left_col; j<=right_col; ++j)
                if(i!=row && j!=col && board[i][j]==ch)
                    return false;
        return true;
    }

    bool isValidSudoku(vector<vector<char> > &board) {
        if(board.empty() || board.size()!=9)
            return false;
        
        for(int i = 0; i<board.size(); ++i)
        {
            for(int j = 0; j<board[i].size(); ++j)
            {
                if(board[i][j]!='.' && !is_fill(board, i, j, board[i][j]))
                {
                    return false;
                }
            }
        }
        return true;
    }
};


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值