返回介绍

solution / 0700-0799 / 0738.Monotone Increasing Digits / README

发布于 2024-06-17 01:03:35 字数 3032 浏览 0 评论 0 收藏 0

738. 单调递增的数字

English Version

题目描述

当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。

给定一个整数 n ,返回 _小于或等于 n 的最大数字,且数字呈 单调递增_ 。

 

示例 1:

输入: n = 10
输出: 9

示例 2:

输入: n = 1234
输出: 1234

示例 3:

输入: n = 332
输出: 299

 

提示:

  • 0 <= n <= 109

解法

方法一:贪心

从数字 n 的高位开始,找到第一个不满足 $n_{i-1} \le n_i$ 的位置 $i$。

然后,从后往前,只要发现 $n_{i-1} \gt n_i$,就将 $n_{i-1}$ 减 1。

最后将位置 $i$ 之后的所有数字都置为 9 即可。

时间复杂度 $O(\log n)$,空间复杂度 $O(\log n)$。

class Solution:
  def monotoneIncreasingDigits(self, n: int) -> int:
    s = list(str(n))
    i = 1
    while i < len(s) and s[i - 1] <= s[i]:
      i += 1
    if i < len(s):
      while i and s[i - 1] > s[i]:
        s[i - 1] = str(int(s[i - 1]) - 1)
        i -= 1
      i += 1
      while i < len(s):
        s[i] = '9'
        i += 1
    return int(''.join(s))
class Solution {
  public int monotoneIncreasingDigits(int n) {
    char[] s = String.valueOf(n).toCharArray();
    int i = 1;
    for (; i < s.length && s[i - 1] <= s[i]; ++i)
      ;
    if (i < s.length) {
      for (; i > 0 && s[i - 1] > s[i]; --i) {
        --s[i - 1];
      }
      ++i;
      for (; i < s.length; ++i) {
        s[i] = '9';
      }
    }
    return Integer.parseInt(String.valueOf(s));
  }
}
class Solution {
public:
  int monotoneIncreasingDigits(int n) {
    string s = to_string(n);
    int i = 1;
    for (; i < s.size() && s[i - 1] <= s[i]; ++i)
      ;
    if (i < s.size()) {
      for (; i > 0 && s[i - 1] > s[i]; --i) {
        --s[i - 1];
      }
      ++i;
      for (; i < s.size(); ++i) {
        s[i] = '9';
      }
    }
    return stoi(s);
  }
};
func monotoneIncreasingDigits(n int) int {
  s := []byte(strconv.Itoa(n))
  i := 1
  for ; i < len(s) && s[i-1] <= s[i]; i++ {
  }
  if i < len(s) {
    for ; i > 0 && s[i-1] > s[i]; i-- {
      s[i-1]--
    }
    i++
    for ; i < len(s); i++ {
      s[i] = '9'
    }
  }
  ans, _ := strconv.Atoi(string(s))
  return ans
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文