3751. Total Waviness of Numbers in Range I
Description
You are given two integers num1 and num2 representing an inclusive range [num1, num2].
The waviness of a number is defined as the total count of its peaks and valleys:
- A digit is a peak if it is strictly greater than both of its immediate neighbors.
- A digit is a valley if it is strictly less than both of its immediate neighbors.
- The first and last digits of a number cannot be peaks or valleys.
- Any number with fewer than 3 digits has a waviness of 0.
[num1, num2].
Example 1:
Input: num1 = 120, num2 = 130
Output: 3
Explanation:
In the range[120, 130]: 120: middle digit 2 is a peak, waviness = 1.121: middle digit 2 is a peak, waviness = 1.130: middle digit 3 is a peak, waviness = 1.- All other numbers in the range have a waviness of 0.
Thus, total waviness is 1 + 1 + 1 = 3.
Example 2:
Input: num1 = 198, num2 = 202
Output: 3
Explanation:
In the range[198, 202]: 198: middle digit 9 is a peak, waviness = 1.201: middle digit 0 is a valley, waviness = 1.202: middle digit 0 is a valley, waviness = 1.- All other numbers in the range have a waviness of 0.
Thus, total waviness is 1 + 1 + 1 = 3.
Example 3:
Input: num1 = 4848, num2 = 4848
Output: 2
Explanation:
Number 4848: the second digit 8 is a peak, and the third digit 4 is a valley, giving a waviness of 2.
Constraints:
1 <= num1 <= num2 <= 105
Solutions
Solution: Simulation
- Time complexity: O(6n -> n)
- n is
num2 - num1 + 1
- n is
- Space complexity: O(1)
JavaScript
js
/**
* @param {number} num1
* @param {number} num2
* @return {number}
*/
const totalWaviness = function (num1, num2) {
const start = Math.max(num1, 100);
const end = Math.max(num2, 100);
let result = 0;
const getWaviness = num => {
const target = `${num}`;
const n = target.length;
let waviness = 0;
for (let index = 1; index < n - 1; index++) {
const current = target[index];
const prev = target[index - 1];
const next = target[index + 1];
if (current < prev && current < next) {
waviness += 1;
}
if (current > prev && current > next) {
waviness += 1;
}
}
return waviness;
};
for (let num = start; num <= end; num++) {
result += getWaviness(num);
}
return result;
};