Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
"((()))", "(()())", "(())()", "()(())", "()()()"
和编程之美,找钱问题,还有出栈入栈很像,记得一起总结,所有的个数是卡特兰特数,其次是注意转折点是满足left < right。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ans;
if(n <= 0)
return ans;
generate(n, n, "", ans);
return ans;
}
void generate(int leftNum,int rightNum,string s,vector<string> &result)
{
if(leftNum==0&&rightNum==0)
{
result.push_back(s);
}
if(leftNum>0)
{
generate(leftNum-1,rightNum,s+'(',result);//string不是引用,所以在递归中是复制传递,返回调用处还是原来的值,因为使用s+'('
}
if(rightNum>0&&leftNum<rightNum)
{
generate(leftNum,rightNum-1,s+')',result);
}
}
};
Rotate Image
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:Could you do this in-place?
class Solution {
public:
void rotate(vector<vector<int> > &matrix)
{
int n = matrix.size();
for(int i = 0; i < n/2; ++ i)//先以中线上下翻转
for(int j = 0; j < n; ++ j)
swap(matrix[i][j], matrix[n-1-i][j]);
for(int i = 0; i < n; ++ i)//再以主对角线翻转
for(int j = i+1; j < n; ++ j)
swap(matrix[i][j],matrix[j][i]);
}
};