算法训练|解密数字、珠宝的最高价值

LCR 165. 解密数字 - 力扣(LeetCode)

总结:这道题目正确理解题意后其实就是一个走楼梯有多少种方法的题目,只不过需要根据条件来判断f(n)能不能等于f(n - 1) + f(n - 2)  将数字转换为字符串之后,根据题意,若当前字符和前一个字符组成的字符串大于25的话则不能合并成一个字母,则f(n) = f(n - 1),若可以合并成一个字母的话则多了一种情况f(n) = f(n - 2),将这两种情况相加就是可以合并成一个字母的情况。接着初始化dp数组。

代码:

class Solution {
public:
    int crackNumber(int ciphertext) {
        string str = to_string(ciphertext);
        if(str.size() == 1 || str.size() == 0)
        return 1;
        vector dp(str.size());
        dp[0] = 1;
        string temp1;
        for(int i = 0;i < 2;i++)//这个循环是用来组成两个连续字符串的,没想到其他的方法就用了循环,下面dp数组上面的也是这样
        {
            temp1 += str[i];
            
        }
        if(temp1 > to_string(25))
                dp[1] = 1;
            else dp[1] = 2;

        for(int i = 2;i < str.size();i++)
        {
            string temp2;
            for(int j = i - 1;j <= i;j++)
            {
                temp2 += str[j];
            }
            if(temp2 <= to_string(25) && str[i - 1] != '0')
            dp[i] = dp[i - 1] + dp[i - 2];
            else dp[i] = dp[i - 1];
        }
            for(auto &r : dp)
            cout<

LCR 166. 珠宝的最高价值 - 力扣(LeetCode)

总结:此题的关键是在于dp数组的初始化,是要累加的,而不是单纯的赋完值就行,状态转移方程则是与右下比较取较大值。

代码:

class Solution {
public:
    int jewelleryValue(vector>& frame) {
        if(frame.size() == 1)
        {
            int sum = 0;
            for(auto &r:frame[0])
            sum += r;
            return sum;
        }
        vector> dp(frame.size(),vector(frame[0].size(),0));
        dp[0][0] = frame[0][0];
        for(int i = 1;i < frame.size();i++)
        {
            dp[i][0] = frame[i][0] + dp[i - 1][0];
        }
        for(int i = 1;i < frame[0].size();i++)
        {
            dp[0][i] = frame[0][i] + dp[0][i - 1];
        }
        for(int i = 1;i < frame.size();i++)
        {
            for(int j = 1;j < frame[0].size();j++)
            {
                dp[i][j] = frame[i][j] + max(dp[i - 1][j],dp[i][j - 1]);
            }
        }
        for(auto &p:dp)
        {
            for(auto &q:p)
            {
                cout<

你可能感兴趣的:(算法)