Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Số nhỏ hơn gần nhất có chữ số đơn điệu tăng trong JavaScript

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