首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单调递增数字

单调递增数字 给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。...10) * 10 - 1 = 1330 - 1 = 1329 // 第二次循环就是 1300 - 1 = 1299 } return num; }; 思路 整体思路就是将数字当作字符串...通常来说可以把数字作为字符串来遍历处理,上面的题解是使用纯数字的方式去做,首先定义i作为标记记录遍历到到的位置,之后定义num作为待处理的数字,定义循环只要能够继续取出两位数就继续循环,这是循环的终止条件...,此外能够使用乘法的地方就尽量不要使用除法,在js中int32如果不能够整除则会自动转双精度64,所以在很多地方都需要强制转数值为int32,之后取出两位数,这里~~是使用位运算强制转了整型,在之后将i...* 10定义到下一位,如果低一位上的值大于大于高一位上的值,那么就将数值在第i位以后的值都变成0,然后减1即可达到上述的将此位减1以及之后的数字都变为9,可以参考上边的示例,在循环结束后返回处理的数字即可

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    贪心算法:单调递增数字

    738.单调递增数字 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。...(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)...空间复杂度:O(1) 贪心算法 题目要求小于等于N的最大单调递增的整数,那么拿一个两位的数字来举例。...例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数...这么说有点抽象,举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。 所以从前后向遍历会改变已经遍历过的结果!

    70530

    单调递增数字

    单调递增数字:https://leetcode-cn.com/problems/monotone-increasing-digits/ 一起刷题吧 一、题意分析 输入:非负整数(大于等于0) 输出:...从前往后遍历的思路也很简单,遍历找到第一个不满足递增条件的位置,将此位置减 1,此位置之后的数值全变成 9 即可。...但需要注意的是,因为涉及到有一个位置会减 1,所以可能出现减 1 之后,与前一位不再是递增关系了,因此当我们找到了第一个不满足递增条件的位置后,要从当前位置往前找,找到第一个满足减 1 之后仍然满足递增条件位置...也就是说两个寻找: 从前往后找到第一个不满足递增条件的位置 从后往前找到第一个满足减 1 后仍然满足递增条件的位置 找到位置之后的元素变成 9,当前位置减 1,就是最终结果 实现参考代码如下: class...N //= 10 digits = digits[::-1] marker = len(digits) # marker是第一个需要改成9的数字

    72720

    js生成年月+字母+五位数的编码,实现字母递增与五位数序号递增

    这里写目录标题 需求: 如图所示: 实现: 字母递增: 序号递增: 核心代码: pass:给后人留个坑吧: 需求: 1、新增数据要求生成的编码格式为YYYYMMA00001。...例如:202209A00001 2、序号 00001递增,当序号大于99999时,字母A递增。例如:A99999 时递增为B00001 如图所示: 实现: 年月就不说了。获取一下补个零就行了。...字母递增: // 获取字母(A大写 a小写) // index 从0开始 let letter = String.fromCharCode("A".charCodeAt(0) + index);...; // 获取字母(A大写 a小写) let letter = String.fromCharCode("A".charCodeAt(0) + index); 序号递增...把字母递增和序号递增单独拧出来还是可以用的。。。

    91420

    「硬核JS数字之美

    = 0.3 的问题,我们后面再说 原码、反码和补码 再说 JS 中的数字问题前,我们还需要补充了解下原码、反码和补码的概念,这里暂先不说结论,我们一步一步的来看,最后在总结什么是原码、反码和补码 起源...) 所以数字的最大正数和最小负数范围如下 1.7976931348623157e+308 ~ -1.7976931348623157e+308 如果超过这个值,则数字太大就溢出了,在 JS 中会显示...0,学名反向溢出 JS中整数的范围 和数字大小不同,数字可以有小数,但是整数就只是单纯整数 我们从尾数 M 来分析,精度最多是 53 位(包含规格化的隐含位 1 ),精确整数的范围其实就是 M 的最大值...,即 1.11111111...111 ,也就是 2^53-1 , 使用 JS 函数 Math.pow(2,53)-1 计算得到数字 9007199254740991 所以整数的范围其实就是 -9007199254740991...[8] JS中如何理解浮点数?

    5.5K20
    领券