• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
ying_vincent
博客园    首页    新随笔    联系   管理    订阅  订阅

LeetCode: Sudoku Solver

看了网上答案,发现一个很有趣的问题,check函数里形参board是传值时(即&board)速度很快,能过large,去掉这个&后就过不了large了,是不是因为没有传值的话每次需要复制这样耗了时间了呢

 1 class Solution {
 2 public:
 3     bool check(int x, int y, vector<vector<char>> &board) {
 4         bool flag[9] = {false};
 5         for (int i = 0; i < 9; i++) 
 6             if (board[x][i] != '.') 
 7                 if (!flag[board[x][i]-'1']) flag[board[x][i]-'1'] = true;
 8                 else return false;
 9         memset(flag, false, 9);
10         for (int i = 0; i < 9; i++) 
11             if (board[i][y] != '.')
12                 if (!flag[board[i][y]-'1']) flag[board[i][y]-'1'] = true;
13                 else return false;
14         memset(flag, false, 9);
15         int xx = x/3*3;
16         int yy = y/3*3;
17         for (int i = 0; i < 3; i++)
18             for (int j = 0; j < 3; j++) 
19                 if (board[xx+i][yy+j] != '.')
20                     if (!flag[board[xx+i][yy+j]-'1']) flag[board[xx+i][yy+j]-'1'] = true;
21                     else return false;
22         return true;
23     }
24     bool dfs(vector<vector<char>> &board) {
25         for (int i = 0; i < 9; i++) {
26             for (int j = 0; j < 9; j++) {
27                 if (board[i][j] == '.') {
28                     for (char k = '1'; k <= '9'; k++) {
29                         board[i][j] = k;
30                         if (check(i, j, board) && dfs(board)) return true;
31                         board[i][j] = '.';
32                     }
33                     return false;
34                 }
35             }
36         }
37         return true;
38     }
39     void solveSudoku(vector<vector<char> > &board) {
40         // Start typing your C/C++ solution below
41         // DO NOT write int main() function
42         dfs(board);
43     }
44 };

 C#

 1 public class Solution {
 2     public void SolveSudoku(char[,] board) {
 3         dfs(board);
 4         
 5     }
 6     public bool dfs(char[,] board) {
 7         for (int i = 0; i < 9; i++) {
 8             for (int j = 0; j < 9; j++) {
 9                 if (board[i, j] == '.') {
10                     for (char k = '1'; k <= '9'; k++) {
11                         board[i, j] = k;
12                         if (check(i, j, board) && dfs(board)) return true;
13                         board[i, j] = '.';
14                     }
15                     return false;
16                 }
17             }
18         }
19         return true;
20     }
21     public bool check(int x, int y, char[,] board) {
22         bool[] flag = new bool[9];
23         for (int i = 0; i < 9; i++) {
24             if (board[x, i] != '.') {
25                 if (!flag[board[x, i] - '1']) flag[board[x, i] - '1'] = true;
26                 else return false;
27             }
28         }
29         flag = new bool[9];
30         for (int i = 0; i < 9; i++) 
31             if (board[i, y] != '.')
32                 if (!flag[board[i, y]-'1']) flag[board[i, y]-'1'] = true;
33                 else return false;
34         flag = new bool[9];
35         int xx = x/3*3;
36         int yy = y/3*3;
37         for (int i = 0; i < 3; i++)
38             for (int j = 0; j < 3; j++) 
39                 if (board[xx+i, yy+j] != '.')
40                     if (!flag[board[xx+i, yy+j]-'1']) flag[board[xx+i, yy+j]-'1'] = true;
41                     else return false;
42         return true;
43     }
44 }
View Code

 

 

posted @ 2013-04-21 17:27  ying_vincent  阅读(299)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3