Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ตัวเลขที่น้อยกว่าและมีหลักเพิ่มขึ้นอย่างเด็ดขาดใน JavaScript

หลักเพิ่มขึ้นอย่างเด็ดขาด (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