【无聊刷题】leetCode之解数独

原创 2016年08月29日 09:40:18

题意:解数独,空缺的方格用.表示。

解法:就是典型的回溯法,用row[i][j],column[i][j],grid[i][j]表示i行,i列,i格j是否用。用flag表示当前是否有解。若有解,则不用再递归下去。可能是leetCode里Hard的题目当中最简单的一题了。

代码:

class Solution {
public:
    int row[9][10];
    int column[9][10];
    int grid[9][10];
    int flag=0;
    void solve(int r,int c,vector<vector<char>>& board)
    {
        int i;
        if(r==9)
        {
            flag=1;
            return;
        }
        if(board[r][c]=='.')
        {
            for(i=1;i<=9;i++)
            {
                if(row[r][i]==0&&column[c][i]==0&&grid[3*(r/3)+c/3][i]==0)
                {
                    board[r][c]=i+'0';
                    row[r][i]=1;
                    column[c][i]=1;
                    grid[3*(r/3)+c/3][i]=1;
                    if(c==8) solve(r+1,0,board);
                    else solve(r,c+1,board);
                    if(flag==1) return;
                    board[r][c]='.';
                    row[r][i]=0;
                    column[c][i]=0;
                    grid[3*(r/3)+c/3][i]=0;
                    
                }
            }
        }
        else
        {
            if(c==8) solve(r+1,0,board);
            else solve(r,c+1,board);
        }
    }
    void solveSudoku(vector<vector<char>>& board) {
        int i,j,k;
        for(i=0;i<9;i++)
        {
            for(j=0;j<10;j++)
                row[i][j]=column[i][j]=grid[i][j]=0;
        }
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                if(board[i][j]!='.')
                {
                    k=board[i][j]-'0';
                    row[i][k]=1;
                    column[j][k]=1;
                    grid[(i/3)*3+j/3][k]=1;
                }
            }
        }
        solve(0,0,board);
    }
};


LeetCode SQL刷题全解

1. 交换性别 Given a table salary, such as the one below, that has m=male and f=female values. Swap all...
  • wstcjf
  • wstcjf
  • 2017年09月15日 22:57
  • 514

回溯法解数独题

近段时间用到回溯算法的地方比较多,对算法的理解也有深入。今天偶然发现一张照片,是高中时未做完的一道数独题。当时用的是“候选余数法”,之后由于太麻烦,就没有做完。不过当时截图保存了,今天突然看到。那时候...
  • u011694809
  • u011694809
  • 2015年05月28日 14:13
  • 2408

LeetCode刷题指南(一)

以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目前,已经有321个问题了。对于大多数人来说,没有时间也没有必要把所有题目都做一遍(时间充裕可以随意)。刷个100题左...
  • Lnho2015
  • Lnho2015
  • 2016年03月23日 15:02
  • 41152

LeetCode刷题系列

LeetCode我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的。专业,覆盖语种全面。提前说说刷题的心得: 尽量手写代码,少使用IDE的代码...
  • zxccxzzxz
  • zxccxzzxz
  • 2016年09月13日 00:47
  • 3529

JavaScript版leetcode源码(持续更新)小白第一次进行刷题

/** * * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = func...
  • zhoudeyou945
  • zhoudeyou945
  • 2016年12月01日 19:28
  • 841

leetcode刷题经验

语言不是最重要的,思想最重要从做上面的题,我发现我更擅长一些数学技巧不高的程序题,习惯靠直觉立马书写代码,而非严格推理之后,再书写代码对于链表的题比较擅长,链表可以在纸上画画,关键要考虑的问题,就是链...
  • basycia
  • basycia
  • 2016年02月28日 15:31
  • 1896

1.开始在leetCode中刷题的一些感受

最近项目上没有什么事情,鉴于自己的基础比较差,正好最近也开始学习了Python,就想在leetCode中使用Python语言刷刷题,加强一下自己的算法的能力,下面就来谈谈最近刷题的一些感受: 1、刚开...
  • changyuxiaoxiao
  • changyuxiaoxiao
  • 2015年11月27日 17:06
  • 2703

[LeetCode刷题笔记] 关于LeetCode的前言

又到了一年毕业就业季了,三年前的校招季我逃避了,可这一次终于还是要轮到我了=_=||。 作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢? LeetCode收录了许多互联网...
  • tostq
  • tostq
  • 2016年07月22日 21:32
  • 3164

java and python学习——第一周leetcode刷题

因为是刚刚开始学习java和python语言,还不太熟悉应该怎么用这两种语言编程,所以就选择了leetcode上最简单的五道题来做。 344、Reverse String     这道题没有什么难...
  • yongyi_yang
  • yongyi_yang
  • 2016年09月10日 22:46
  • 419

leetcode刷题,总结,记录,备忘 328

leetcode328Odd Even Linked List Given a singly linked list, group all odd nodes together follow...
  • guicaisa
  • guicaisa
  • 2016年01月21日 20:29
  • 1030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【无聊刷题】leetCode之解数独
举报原因:
原因补充:

(最多只允许输入30个字)