解决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

相关推荐
用户8356290780512 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780512 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
vibecoding日记4 小时前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr21386 小时前
Verilog参数化游程编码RLE模块
算法
望易7 小时前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络10 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
你好潘先生11 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师11 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码11 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python