解决leetcode第3753题范围内总波动值II

3753.范围内总波动值II

难度:困难

问题描述:

给你两个整数num1和num2,表示一个闭区间[num1,num2]。

一个数字的波动值定义为该数字中峰和谷的总数:

如果一个数位严格大于其两个相邻数位,则该数位为峰。

如果一个数位严格小于其两个相邻数位,则该数位为谷。

数字的第一个和最后一个数位不能是峰或谷。

任何少于3位的数字,其波动值均为0。

返回范围[num1,num2]内所有数字的波动值之和。

示例1:

输入:num1=120,num2=130

输出:3

解释:

在范围[120,130]内:

120:中间数位2是峰,波动值=1。

121:中间数位2是峰,波动值=1。

130:中间数位3是峰,波动值=1。

范围内所有其他数字的波动值均为0。

因此,总波动值为1+1+1=3。

示例2:

输入:num1=198,num2=202

输出:3

解释:

在范围[198,202]内:

198:中间数位9是峰,波动值=1。

201:中间数位0是谷,波动值=1。

202:中间数位0是谷,波动值=1。

范围内所有其他数字的波动值均为0。

因此,总波动值为1+1+1=3。

示例3:

输入:num1=4848,num2=4848

输出:2

解释:

数字4848:第二个数位8是峰,第三个数位4是谷,波动值为2。

提示:

1<=num1<=num2<=1015

问题分析:

解决本问题,设计函数get_peaks_and_valleys_in_num(n),其功能是从一个数字n中找出出现的峰和谷的总数并返回,在主程序中遍历从num1到num2的所有数字,并将出现的峰和谷的数量累加求和,最后得到[num1,num2]内所有数字的波动值之和。

程序如下:

python 复制代码
#统计一个数字n中有多少个峰和谷,返回统计的结果
def get_peaks_and_valleys_in_num(n):
    s=str(n)
    n=len(s)
    if n<3:
        return 0
    else:
        c=0
        for i in range(1,n-1):
            if (s[i]>s[i-1] and s[i]>s[i+1]) or (s[i]<s[i-1] and s[i]<s[i+1]):
                c=c+1
        return c

#主程序
num1=int(input('pls input num1='))
num2=int(input('pls input num2='))
t=0
for i in range(num1,num2+1):
    t=t+get_peaks_and_valleys_in_num(i)
print(f'[{num1},{num2}]内所有数字的波动值之和为{t}')

运行实例一

pls input num1=120

pls input num2=200

120,200\]内所有数字的波动值之和为44 #### 运行实例二 pls input num1=42315 pls input num2=42316 \[42315,42316\]内所有数字的波动值之和为6 #### 运行实例三 pls input num1=23 pls input num2=30 \[23,30\]内所有数字的波动值之和为0

相关推荐
华研前沿标杆游学7 分钟前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然11 分钟前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析
ghie909016 分钟前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体116 分钟前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk99816 分钟前
VSC优化算法MATLAB实现
开发语言·算法·matlab
AI小怪兽34 分钟前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机
wszy18091 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
Z1Jxxx1 小时前
加密算法加密算法
开发语言·c++·算法
Eric.Lee20211 小时前
python实现 mp4转gif文件
开发语言·python·手势识别·手势交互·手势建模·xr混合现实
EntyIU1 小时前
python开发中虚拟环境配置
开发语言·python