1.solve数独
dfs
class Solution { public: bool isValid(vector<vector<char> > &board, int x, int y) { int i, j; for (i = 0; i < 9; i++) if (i != x && board[i][y] == board[x][y]) return false; for (j = 0; j < 9; j++) if (j != y && board[x][j] == board[x][y]) return false; for (i = 3 * (x / 3); i < 3 * (x / 3 + 1); i++) for (j = 3 * (y / 3); j < 3 * (y / 3 + 1); j++) if (i != x && j != y && board[i][j] == board[x][y]) return false; return true; } bool solveSudoku(vector<vector<char> > &board) { for (int i = 0; i < 9; ++i) for (int j = 0; j < 9; ++j) { if ('.' == board[i][j]) { for (int k = 1; k <= 9; ++k) { board[i][j] = '0' + k; if (isValid(board, i, j) && solveSudoku(board)) return true; board[i][j] = '.'; } return false; } } return true; } };
2.Longest Valid Parentheses
class Solution { public: int longestValidParentheses(string s) { stack<int> left;//position of '(' for(int ii = 0; ii < s.size(); ++ii){ if (s[ii] == '(') left.push(ii); else if (!left.empty()){//')' s[ii] = 'k'; s[left.top()] = 'k'; left.pop(); } } int maxLength = 0; int length = 0; for(int ii = 0; ii < s.size(); ++ii){ if (s[ii]=='k'){ ++length; if (maxLength < length) maxLength = length; } else length = 0; } return maxLength; } };