一、问题描述


二、解题思路
可以采用枚举+数字逐位分离的方法来解决这个问题,遍历区间,对于每一个数字i,计算其波动值:
<1>如果i<=100,表示其波动值为0;
<2>否则,进行滚动各位数字分离,更新next2,now,next1,如果now为峰或者谷,ret++,直至i==0;
三、代码实现
cpp
class Solution {
public:
int totalWaviness(int num1, int num2) {
int ret=0;
for(int i=num1;i<=num2;i++)
ret+=sum(i);
return ret;
}
int sum(int i){
if(i<100) return 0;
int ret=0;
//数位分离
//初始化
int next1=i%10;i/=10;
int now=i%10;i/=10;
int next2=i%10;i/=10;
if(now>next1&&now>next2||now<next1&&now<next2) ret++;
while(i){
next1=now;
now=next2;
next2=i%10;
i/=10;
if(now>next1&&now>next2||now<next1&&now<next2) ret++;
}
return ret;
}
};