(1) Triangle
动态规划,从下往上更新寻找当前结点为终点的路径最小值:
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle) {
int n=triangle.size();
vector<int> ret(triangle[n-1]);
for(int i=n-2;i>=0;i--)
for(int j=0;j<triangle[i].size();j++)
ret[j]=min(ret[j],ret[j+1])+triangle[i][j];
return ret[0];
}
};
(2) Count and Say
只要读懂题目就发现很简单。。。
class Solution {
private:
string solve(string tmp) {
string ret;
char cur=tmp[0];
int count=0;
for(int i=0;i<tmp.size();i++)
{
if(tmp[i]==cur)
{
count++;
}
else
{
char tmp1=count+'0';
ret=ret+tmp1+cur;
count=1;
cur=tmp[i];
}
}
char tmp1=count+'0';
ret=ret+tmp1+cur;
return ret;
}
public:
string countAndSay(int n) {
string ret("1");
if(n>1)
for(int i=1;i<n;i++)
ret=solve(ret);
return ret;
}
};