738. Monotone Increasing Digits
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。
整数 имеет монотонно возрастающие цифры тогда и только тогда, когда каждая пара соседних цифр x и y удовлетворяет x <= y. Задав 整数 n, return наибольшее number, которое меньше или равно n с монотонно возрастающими цифрами.
例:
Input: n = 10
Output: 9
C# 解法
照合済み/オリジナルpublic class Solution {
public int MonotoneIncreasingDigits(int N) {
var digits = N.ToString().ToCharArray();
int marker = digits.Length;
for (int i = digits.Length - 1; i > 0; i--) {
if (digits[i] < digits[i - 1]) {
marker = i;
digits[i - 1]--;
}
}
for (int i = marker; i < digits.Length; i++) {
digits[i] = '9';
}
return int.Parse(new string(digits));
}
}
C++ 解法
自動ドラフト、提出前に確認#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int MonotoneIncreasingDigits(int N) {
var digits = N.ToString().ToCharArray();
int marker = digits.size();
for (int i = digits.size() - 1; i > 0; i--) {
if (digits[i] < digits[i - 1]) {
marker = i;
digits[i - 1]--;
}
}
for (int i = marker; i < digits.size(); i++) {
digits[i] = '9';
}
return int.Parse(new string(digits));
}
}
Java 解法
照合済み/オリジナルpublic class Solution {
public int monotoneIncreasingDigits(int n) {
char[] digits = Integer.toString(n).toCharArray();
int mark = digits.length;
for (int i = digits.length - 1; i > 0; i--) {
if (digits[i] < digits[i - 1]) {
mark = i;
digits[i - 1]--;
}
}
for (int i = mark; i < digits.length; i++) {
digits[i] = '9';
}
return Integer.parseInt(new String(digits));
}
}
JavaScript 解法
照合済み/オリジナルvar monotoneIncreasingDigits = function(n) {
let digits = Array.from(String(n), Number);
let mark = digits.length;
for (let i = digits.length - 1; i > 0; i--) {
if (digits[i] < digits[i - 1]) {
mark = i;
digits[i - 1]--;
}
}
for (let i = mark; i < digits.length; i++) {
digits[i] = 9;
}
return parseInt(digits.join(''), 10);
};
Python 解法
照合済み/オリジナルdef monotoneIncreasingDigits(n):
digits = list(str(n))
mark = len(digits)
for i in range(len(digits) - 1, 0, -1):
if digits[i] < digits[i - 1]:
mark = i
digits[i - 1] = str(int(digits[i - 1]) - 1)
for i in range(mark, len(digits)):
digits[i] = '9'
return int("".join(digits))
Go 解法
照合済み/オリジナルpackage main
import "strconv"
func monotoneIncreasingDigits(N int) int {
digits := []byte(strconv.Itoa(N))
marker := len(digits)
for i := len(digits) - 1; i > 0; i-- {
if digits[i] < digits[i-1] {
marker = i
digits[i-1]--
}
}
for i := marker; i < len(digits); i++ {
digits[i] = '9'
}
result, _ := strconv.Atoi(string(digits))
return result
}
Algorithm
Преобразуйте number в строку для удобства обработки.
find позицию, где последовательность перестает быть монотонной.
Уменьшите соответствующую цифру и установите все последующие цифры в 9.
😎
Vacancies for this task
有効な求人 with overlapping task tags are 表示.
有効な求人はまだありません。