หลักเพิ่มขึ้นอย่างเด็ดขาด (Monotonically Increasing Digits)
จำนวนเต็มมีหลักเพิ่มขึ้นอย่างเด็ดขาด ก็ต่อเมื่อแต่ละคู่ของหลักติดกัน x และ y ตอบสนอง x <= y
ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลข num เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรหาตัวเลขที่ใหญ่ที่สุดที่น้อยกว่าหรือเท่ากับ num ที่มีหลักเพิ่มขึ้นอย่างเด็ดขาด
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const num = 332;
เอาต์พุต
const output = 299;
ตัวอย่างโค้ด
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));
ผลลัพธ์
299