leetcode-sudoku solver
2014-11-16 09:48
357 查看
这道题让我切身体会了引用传递和值传递这两种方式的巨大差异。
在isValid子函数中,若采用引用传递将board传参,程序运行时间在0.068左右,可以AC.
若采用值传递将board传参,程序运行时间在2.011左右,直接TLE。
一切只因为一个"&". 引用传递与值传递效率差异可以如此明显。
在isValid子函数中,若采用引用传递将board传参,程序运行时间在0.068左右,可以AC.
若采用值传递将board传参,程序运行时间在2.011左右,直接TLE。
一切只因为一个"&". 引用传递与值传递效率差异可以如此明显。
class Solution { public: void solveSudoku(vector<vector<char> > &board) { dfs(board, 0, 0); } bool dfs(vector<vector<char>> &board,int i,int j) { if (j >= 9) return dfs(board,i+1,0); if (i == 9) return true; if (board[i][j] == '.') { for (int k = 1; k <= 9; k++) { board[i][j] = char(k + '0'); if (isValid(board, i, j)) { if (dfs(board, i, j + 1)) return true; } board[i][j] = '.'; } } else return dfs(board,i,j+1); return false; } bool isValid(vector<vector<char>> &board,int i,int j)//在board作为参数时,有&和没&,时间效率差别非常大!!! { for (int k = 0; k < 9; k++) { if (k != j&&board[i][j] == board[i][k]) return false; } for (int k = 0; k < 9; k++) { if (k != i&&board[i][j] == board[k][j]) return false; } for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row++)//(i,j)所在的小九宫格 { for (int col = j / 3 * 3; col < j / 3 * 3 + 3; col++) { if ((row != i || col != j) && board[i][j] == board[row][col]) return false; } } return true; } };
相关文章推荐
- LEETCODE —— Sudoku Solver
- Leetcode: Sudoku Solver
- Java for LeetCode 037 Sudoku Solver
- leetcode--Sudoku Solver
- leetcode 37: Sudoku Solver
- LeetCode题解——Sudoku Solver
- leetcode习题解答:37. Sudoku Solver
- LeetCode-Sudoku Solver
- [Leetcode] Sudoku Solver
- [leetcode] Sudoku Solver
- LeetCode 37 Sudoku Solver
- [LeetCode]037-Sudoku Solver
- Sudoku Solver 破解数独 @LeetCode 附DFS感想
- leetcode第一刷_Sudoku Solver
- LeetCode 37 SudoKu Solver
- LeetCode 37 Sudoku Solver 回溯和深度遍历 还要学习
- LeetCode-----37. Sudoku Solver(解数读)
- [leetcode]Sudoku Solver
- leetcode:Sudoku Solver
- LeetCode 36 Sudoku Solver