跟左神一起练算法

在这里插入图片描述
这道题算是感觉非常难的一道题

先跳过,后面有时间了再讨论
接着看下面这一道题
在这里插入图片描述
在这里插入图片描述
当然在第一步变完之后还需要考虑的就是假如人家本身就是回文的话,那就需要找一次最大的,找一次最小的

对于解决进位的问题是每次多给前面准备一个空位,用字符0填充
对于解决每次加减某一位这里采用的是,( 字符串长度 - 1)/ 2 的方式来确定对字符串的哪一位进行修改

在这里插入图片描述
这个题之前我都已经做了,现在这次是左神讲的,再来分析一下
暴力解法就是这个,就是直接对一个数,去除以2/3/5,直到把这三个因子除完,如果除完之后结果是1,那么就说明,这个数只含有2/3/5,这三个因子,反之不是,但是效率太低

在这里插入图片描述

分析每一个丑数其实都是由上一个丑数*2/3/5得到的,那么只要从第一个丑数开始推就可以快速计算到每一个丑数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void func(int num)
{
	vector<int> vec;
	vec.resize(num);
	int i1 = 0, i2 = 0, i3 = 0;
	vec[0] = 1;
	int count = 1;
	while (count < num)
	{
		vec[count] = min(min(vec[i1] * 2, vec[i2] * 3), vec[i3] * 5);
		if (vec[count] == vec[i1] * 2)
			++i1;
		if (vec[count] == vec[i2] * 3)
			++i2;
		if (vec[count] == vec[i3] * 5)
			++i3;
		++count;
	}
	cout << vec[count - 1] << endl;;
}
int main()
{
	func(10);
	return 0;
}

需要注意的是,丑数其实只是出题人定义的一种规则,这种规则可以被改变成任意的规则,也就是说在解决很多自定义的规则的时候,要求后面的数,可以多想想它是由前面的那个数字所得到的,这个思路可以解决很多的问题

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值