3751. 范围内总波动值 I

题目描述

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

波动值:一个数字中「峰」和「谷」的总数。

  • :某数位严格大于左右相邻数位
  • :某数位严格小于左右相邻数位
  • 首尾数位不参与判断,位数 < 3 的数字波动值为 0

返回区间内所有数字的波动值之和。

思路:枚举

枚举每个数字,先转化为字符串,然后遍历每个数位,判断是否为峰或谷,如果是则计数加1,最后返回计数之和。

  • 时间复杂度:O(n * m):其中是区间长度,是数字的位数
  • 空间复杂度:O(m):其中是数字的位数

代码

class Solution:
    def totalWaviness(self, num1: int, num2: int) -> int:
        def waviness(num:int)->int:
            s = str(num)
            return sum((a < b > c) or (a > b < c)
                for a,b,c in zip(s,s[1:],s[2:]))
        
        return sum(waviness(n) for n in range(num1,num2+1))