专栏首页前端小书童【一天一大 lee】单调递增的数字 (难度:中等) - Day20201215

【一天一大 lee】单调递增的数字 (难度:中等) - Day20201215

20201215

题目:

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

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

示例:

  1. 示例 1:
输入: N = 10
输出: 9
  1. 示例 2:
输入: N = 1234
输出: 1234
  1. 示例 3:
输入: N = 332
输出: 299

说明:

  • 是在 [0,
10^9

] 范围内的一个整数。

抛砖引玉

将 N 准换成数组(不准换也可以,但是字符串不能通过索引直接替换元素,修改元素时需要重新拼接)

从后到前遍历数组,遇到前一位元素大于后一位元素时:

  • 前一位减 1(注意:此时可能出现-1,但是传入的 N 最高位不会是 0,那么最高位永远不会出现 0,所有可以不用特殊处理)
  • 从后一位元素开始之后元素都替换成 9

最后输出拼接的整数

抛砖引玉

/**
 * @param {number} N
 * @return {number}
 */
var monotoneIncreasingDigits = function(N) {
    // 当N小于10(只有1位),直接返回
    if (N < 10) return N
    let list = Array.from(String(N)),
        len = list.length,
        index = len - 1
    while (index > 0) {
        if (list[index - 1] > list[index]) {
            list[index - 1] -= 1
            let i = index
            while (i < len) {
                list[i] = 9
                i++
            }
        }
        index--
    }
    return parseInt(list.join(''))
}

博客: 前端小书童

每天的每日一题,写的题解会同步更新到公众号一天一大 lee 栏目 欢迎关注留言

公众号:前端小书童

本文分享自微信公众号 - 前端小书童(gaowenju_web),作者:前端小书童

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【一天一大 lee】单词接龙 (难度:中等) - Day20201105

    给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:

    前端小书童
  • 【一天一大 lee】移掉K位数字 (难度:中等) - Day20201115

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

    前端小书童
  • 【一天一大 lee】重构字符串 (难度:中等) - Day20201130

    将所有字符规制到哈希表中,且记录每个字符出现的次数,然后当字符单个字符的间隔填充。

    前端小书童
  • 一天一大 lee(表示数值的字符串)难度:中等-Day20200902

    例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、...

    前端小书童
  • 【一天一大 lee】四数之和 (难度:中等) - Day20201005

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b...

    前端小书童
  • 【一天一大 lee】两数相加 (难度:中等) - Day20201004

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    前端小书童
  • 【一天一大 lee】划分字母区间 (难度:中等) - Day20201022

    字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。

    前端小书童
  • 【一天一大 lee】去除重复字母 (难度:中等) - Day20201220

    s 中元素逐个入栈,如果遇到 Unicode 较小的元素,尽量将其放大栈底部 (如果后续还有栈内已经排列的原则,则出栈让 Unicode 较小的元素先入栈)

    前端小书童
  • 【一天一大 lee】四数相加 II (难度:中等) - Day20201127

    给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[...

    前端小书童
  • 【一天一大 lee】字母异位词分组 (难度:中等) - Day20201214

    给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

    前端小书童
  • 【一天一大 lee】数组中的最长山脉 (难度:中等) - Day20201025

    那么枚举数组中可能是交换节点的元素,再以次节点为中心左右遍历统计连续的长度,最终返回最大长度即题目要求的结果

    前端小书童
  • 一天一大 lee(被围绕的区域)难度:中等-Day20200811

    被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终...

    前端小书童
  • 【一天一大 lee】字符串中的第一个唯一字符 (难度:简单) - Day20201223

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

    前端小书童
  • 一天一大 lee(反转字符串中的单词 III)难度:简单-Day20200830

    给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

    前端小书童
  • 【一天一大 lee】求根到叶子节点数字之和 (难度:中等) - Day20201029

    给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

    前端小书童
  • 一天一大 lee(二叉树的中序遍历)难度:中等-Day20200914

    递归方法采用了深度优先遍历的形式,一般可以采用深度优先遍历就可以采用广度优先遍历。

    前端小书童
  • 【一天一大 lee】有多少小于当前数字的数字 (难度:简单) - Day20201026

    给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。

    前端小书童
  • 【一天一大 lee】最少数量的箭引爆气球 (难度:中等) - Day20201123

    在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标...

    前端小书童
  • 【一天一大 lee】完全二叉树的节点个数 (难度:中等) - Day20201124

    完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h...

    前端小书童

扫码关注云+社区

领取腾讯云代金券