Chữ số đơn điệu tăng
Một số nguyên có chữ số đơn điệu tăng nếu và chỉ nếu mỗi cặp chữ số liền kề x và y thỏa mãn x <= y.
Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một số num làm đối số duy nhất. Hàm phải tìm số lớn nhất nhỏ hơn hoặc bằng num có chữ số đơn điệu tăng.
Ví dụ, nếu đầu vào là:
Đầu vào
const num = 332;
Đầu ra
const output = 299;
Ví dụ
Dưới đây là mã thực hiện:
const num = 332;
const monotoneIncreasingDigits = (num) => {
const checkMonotone = (x) => {
if (x <= 9) { return true; }
let currentDigit = x % 10;
while (x) {
const next = Math.floor(x / 10);
const nextDigit = next % 10;
if (currentDigit >= nextDigit) {
currentDigit = nextDigit;
x = next;
} else {
return false;
}
}
return true;
};
if (checkMonotone(num)) { return num; }
const digits = num.toString().split('').map(x => Number(x));
return digits.reduce((acc, num, index) => {
if (num >= 1) {
const current = parseInt(digits.slice(0, index).join('') + num - 1 + new Array(digits.length - index - 1).fill('9').join(''), 10);
if (checkMonotone(current)) {
return Math.max(acc, current);
}
}
return acc;
}, 0);
};
console.log(monotoneIncreasingDigits(num));
Kết quả
299