(1) Rotate Image
根据[1]:
class Solution {
public:
void rotate(vector<vector<int> > &matrix) {
int n=matrix.size();
for(int i=0;i<n;i++)
for(int j=0;j<n-i;j++)
swap(matrix[i][j],matrix[n-1-j][n-1-i]);
for(int i=0;i<n/2;i++)
for(int j=0;j<n;j++)
swap(matrix[i][j],matrix[n-1-i][j]);
}
};
(2) Binary Tree Postorder Traversal
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root) {
vector<int> ret;
stack<TreeNode *> stk;
TreeNode *visited;
if(!root)
return ret;
while(root || !stk.empty())
{
while(root)
{
stk.push(root);
root=root->left;
}
root=stk.top();
if(!root->right || visited==root->right)
{
ret.push_back(root->val);
visited=root;
stk.pop();
root=NULL;
}
else
root=root->right;
}
return ret;
}
};
更详细有关二叉树的遍历参考[2]。
(3) Minimum Path Sum
典型的动态规划问题:
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
int n=grid[0].size(), m=grid.size();
int tmp[m][n];
tmp[0][0]=grid[0][0];
if(m>1)
for(int i=1;i<m;i++)
tmp[i][0]=tmp[i-1][0]+grid[i][0];
if(n>1)
for(int j=1;j<n;j++)
tmp[0][j]=tmp[0][j-1]+grid[0][j];
if(m>1 && n>1)
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
tmp[i][j]=min(tmp[i-1][j]+grid[i][j],tmp[i][j-1]+grid[i][j]);
return tmp[m-1][n-1];
}
};
参考:
[1] http://www.2cto.com/kf/201401/274473.html
[2] http://blog.csdn.net/wzy_1988/article/details/8450952