首页 > 其他分享 >剑指offer——Day10动态规划(中等)

剑指offer——Day10动态规划(中等)

时间:2022-11-16 17:45:24浏览次数:45  
标签:xi offer int max 中等 Day10 vec str dp

Day10 2022.11.16 动态规划(中等)

46.把数字翻译成字符串

自己实现

想到每种数字组成会很复杂,就放弃了,其实题目已经说了是两位数的组合,就还好。

题解

动态规划。首先,动态规划表dp[i]代表以xi为结尾的翻译方案数量。

  • 若xi和xi-1组成的两位数字可以被翻译,则dp[i] = dp[i-1] + dp[i-2] ;
  • 若不能被翻译,则dp[i] = dp[i-1]

其中,可以被翻译的两位数区间为[10, 25](因为当xi-1 = 0时,组成的两位数是无法被翻译的,eg:00,01...)

因此:转移方程为1668587625603

初始状态为dp[0] = d[1] = 1,即没有数字和第一位数字的时候是一种情况

以最后状态为结束,在下列代码中即为a的值

代码如下:

class Solution {
public:
    int translateNum(int num) {
        string str=to_string(num);
        int a=1;
        int b=1;
        int i;
        for(i=2;i<=str.length();i++)
        {
            string tmp=str.substr(i-2,2);
            int c=(tmp>="10"&&tmp<="25"?a+b:a);
            b=a;
            a=c;
        }
        return a;
    }
};

代码表现

hint:

  • 这个题还是没做出来,多想一想。别害怕它的复杂,其实细想还好

48.最长不含重复字符的子字符串

自己实现

终于自己做出来了!其实就从最开始遍历字符串,dp[i]代表以xi结尾的最长子字符串长度,这样的话就正好能找到之前连续的最长的字符串直接find()了。

然后如果断了,就从从之前那个字符串找到相应字符的位置开始接上

代码如下:

class Solution {
public:
	int lengthOfLongestSubstring(string s) {
		if (s.size() == 0)return 0;
		vector<int> vec;
		vec.push_back(1);
		int i;
		int max = 1;
		for (i = 1; i < s.size(); i++)
		{
			int len_front = vec[i - 1];
			string str = s.substr(i - len_front, len_front);
			if (str.find(s[i]) != str.npos)
			{

				if (vec[i - 1] > max)max = vec[i - 1];
				vec.push_back(len_front-str.find(s[i]));
			}
			else
			{
				vec.push_back(vec[i - 1] + 1);
				if (vec[i] > max)max = vec[i];
			}
		}
		return max;
	}
};

代码表现

hint:

  • dp[i]是以xi为结尾的连续……

标签:xi,offer,int,max,中等,Day10,vec,str,dp
From: https://www.cnblogs.com/cspzyy/p/16896759.html

相关文章

  • 剑指offer——Day06搜索与回溯算法(简单)
    Day62022.11.12搜索与回溯算法(简单)32.Ⅰ.从上到下打印二叉树自己实现用队列来实现。将当前节点的值打印后向queue中push它的左右非NULL儿子节点,并将该节点pop出去代......
  • 剑指offer——Day07搜索与回溯算法(简单)
    Day72022.11.13树的子结构26.树的子结构自己实现应该是用递归,具体没有思路,直接看题解了题解用两个函数isSubStructure()和recur()来解决。就不断去递归比较A的子树......
  • 剑指offer——Day03字符串(简单)
    Day32022.11.9字符串(简单)05.替换空格自己实现遍历字符串中查找空格位置,erase空格,insert"%20"代码如下:classSolution{public:stringreplaceSpace(strings)......
  • 剑指 Offer 58 - II. 左旋转字符串
    剑指Offer58-II.左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"ab......
  • Day10.2:九九乘法表打印详解思路
    九九乘法表打印按照以下格式对九九乘法表正确输出:/*1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2......
  • Day10.1:while循环结构
    while循环结构while循环while循环结构是最基本的循环,他的结构为:while(布尔表达式){//循环的内容}只有当布尔表达式的值为true时,开始循环我们一般需要的是有限......
  • 【剑指Offer学习】【面试题3 :二维数组中的查找】
    思路:规律从右上角开始,或左下开始。不能从左上角开始找,这样每次比较后向右和向下都是越来越大。publicclassP03_FindMaxInMatrix{/*规律从右上角开始:......
  • 拿下阿里自动化测试岗23k*14薪offer的全程面试记录解析以及总结
    一、自我介绍面试官您好!我叫xx,来自深圳,毕业之后一直从事于软件测试的工作,有做过保险、金融、电商等项目;有做过做功能测试、接口测试,自动化测试,在工作中积极主动、可以独立的......
  • 剑指 Offer 41. 数据流中的中位数 - 力扣(Leetcode)
    剑指Offer41.数据流中的中位数-力扣(Leetcode)分析维护两个堆,一个大根堆,一个小根堆。插入操作:当进行插入时,先判断大根堆中是否有元素,如果没有直接插入大根堆,若有......
  • 剑指 Offer 59 - I. 滑动窗口的最大值 - 力扣(Leetcode)
    剑指Offer59-I.滑动窗口的最大值-力扣(Leetcode)一.分析方法一:数组长度为1e5,k的大小为1e4,因此直接暴力计算会TLE。我们可以思考一个更复杂的问题:询问任意区间中的......