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

贪心算法:单调递增的数字

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

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

    单调递增的数字

    题目:https://leetcode-cn.com/problems/monotone-increasing-digits 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增...(当且仅当每个相邻位数上的数字 x 和 y 满足 x 递增的。)...分析 由于结果要求各位数字单调递增,那么这些数字必然形如 a0a1a2……an (1 <= a0 <= a1 <= a2 <= …… <= an <= 9) 显然有: ----------...a2 - a1) * 111……1 + ………… + (an - an-1) * 1 \-(n-2)个1-/ 可见最终结果必然是若干个形如 11……11 的数字相加所得...本题中,最大的n为10^9,所以,可以从111111111开始依次累加,如果继续累加将导致结果超过n,则去掉一个1继续循环。总累加次数不超过9次。

    42910

    单调递增的数字

    单调递增的数字:https://leetcode-cn.com/problems/monotone-increasing-digits/ 一起刷题吧 一、题意分析 输入:非负整数(大于等于0) 输出:...通过观察,我们可以发现如果新的个位数与它前一位比较,如果符合题目中的递增要求,则直接写入在最前位即可,如果不符合,则需要做转换,转换的规律也很简单,即将原来记录的结果每一位都转换为 9,即低位最大,而当前获取的个位数减...通过上面的推导过程,我们知道需要记录前一位被比较的数值,同时还涉及到低位替换为 9 的过程,我们可以在遍历的过程把低位替换 9 的结果保存下来,在需要替换时直接取值即可,参考代码如下: class Solution...但需要注意的是,因为涉及到有一个位置会减 1,所以可能出现减 1 之后,与前一位不再是递增关系了,因此当我们找到了第一个不满足递增条件的位置后,要从当前位置往前找,找到第一个满足减 1 之后仍然满足递增条件位置...N //= 10 digits = digits[::-1] marker = len(digits) # marker是第一个需要改成9的数字

    73220

    单调递增的数字

    单调递增的数字 给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。当且仅当每个相邻位数上的数字x和y满足x 递增的。...10) * 10 - 1 = 1330 - 1 = 1329 // 第二次循环就是 1300 - 1 = 1299 } return num; }; 思路 整体思路就是将数字当作字符串...,从尾到头逆向遍历一遍,每次比较两位,如果后一个位置上的数小于前一个位置上的数,那么就将前边的数减一,并将后边的所有位都变为9,例如当我们遍历到了1323中比较32的这个位置上,此时3 > 2符合条件,...通常来说可以把数字作为字符串来遍历处理,上面的题解是使用纯数字的方式去做,首先定义i作为标记记录遍历到到的位置,之后定义num作为待处理的数字,定义循环只要能够继续取出两位数就继续循环,这是循环的终止条件...* 10定义到下一位,如果低一位上的值大于大于高一位上的值,那么就将数值在第i位以后的值都变成0,然后减1即可达到上述的将此位减1以及之后的数字都变为9,可以参考上边的示例,在循环结束后返回处理的数字即可

    1.5K20

    华为OD机试 非严格递增连续数字序列

    本期题目:非严格递增连续数字序列 题目 输入一个字符串仅包含大小写字母和数字 求字符串中包含的最长的非严格递增连续数字序列长度 比如: 12234 属于非严格递增数字序列 输入 输入一个字符串仅包含大小写字母和数字...输出 输出字符串中包含的最长的非严格递增连续数字序列长度 题解地址 ⭐️ 华为 OD 机考 Python https://blog.csdn.net/hihell/article/details...⭐️ 华为 OD 机考真 C 语言 https://blog.csdn.net/hihell/article/details/129371298 华为 OD 机试 对于想要参加华为OD机试的应聘者来说...,需要提前准备好相关的知识和技能。...在准备期间,应聘者需要系统地学习各种编程语言的知识,熟悉各种数据结构和算法的使用方法,同时还需要进行大量的练习和实战演练,积累经验,提高解决问题的能力。

    79720

    mysql中字符转数字,MYSQL字符数字转换为数字「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。...1、将字符的数字转成数字,比如’0’转成0可以直接用加法来实现 例如:将user表中的uid 进行排序,可uid的定义为varchar,可以这样解决 select * from user order by...(uid+0) 2、在进行ifnull处理时,比如 ifnull(a/b,’0′) 这样就会导致 a/b成了字符串,因此需要把’0’改成0,即可解决此困扰 3、比较数字和varchar时,比如a=11...,b=”11ddddd”; 则 select 11=”11ddddd”相等 若绝对比较可以这样: select binary 11 =binary “11ddddd” 另外: 今天看到Mysql的 Cast...和Convert函数,也能实现‘字符数字转换为数字’ 两者具体的语法如下: Cast(value as type); Convert(value ,type); type不是都可以滴,可以转换的type

    1.9K20

    js中字符串转换为数字

    js 字符串转化成数字的三种方法主要有 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数:   js提供了parseInt()和parseFloat()两个转换函数。...ECMAScript中可用的3种强制类型转换如下:   Boolean(value)——把给定的值转换成Boolean型;   Number(value)——把给定的值转换成数字(可以是整数或浮点数);...用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。 当要转换的值是至少有一个字符的字符串、非0数字或对象时,Boolean()函数将返回true。...如果该值是空字符串、数字0、undefined或null,它将返回false。 可以用下面的代码段测试Boolean型的强制类型转换。   ...,实现了字符串到数字的类型转换,不过这个方法还是不推荐的

    11.5K41

    如何查找递增连续数组中缺失的数字

    在一个长度为n的递增数组中,数组中元素范围是0 ~ n-1,如何在这个递增连续数组中查找缺失的数字? 分析下: 1. 排序数组中的搜索算法,首先想到的就是二分法查找 2....丢失的数字之前的左子数组:nums[m] = m, 需要找到第一个nums[m] > m的数组索引值即可....r = m-1; 这里多解释下,即使m-1这个位置是相同的, 也会被后续的左指针r=m+1的情况下处理掉,此处不好理解,需多多体会....在处理边界值的时候,在(i == r)的时候,还多需要多遍历一次,向右移动左指针一次. 4. 这时,左指针值便是最后想要的值. 所以我们的遍历条件为(l的结果值....综上,对于有序数组的查找,一般都会使用二分法查找.在查找数据的时候,注意左右边界指针的移动.以及遍历标记(l<=j)即可.

    3.2K21

    怎样将IP地址转换为数字

    首先我们选择一个IP地址,这里我找了一个,PING一下,是通的。好就用这个IP地址做测试吧。 ? 打开开始菜单中选择计算器,设置计算器类型为程序员 ?...在十进制下输入IP地址的第一个段,10 转换为十六进制数,如图,已经将10进制的10转换为了十六进制的A了。 ? 清空结果。 把刚刚转换的数字记录下来,继续转换下一段的IP地址。...把其它的三个都用同样的方法进行转换,并把结果记录下来。 我转换完是 A 50 6 A6 把刚刚转换后的结果,输入到十六进制下的计算机器中。...(每组2位,只有一位的前面0补齐) 将十六进制数转换为十进制数,于是我们得到了一串数字。‭173016742‬。这就是我们得到的数字了。 ? 好了,我们测试一下。ping 刚刚那段数字。...可以看到,返回结果已经出来了,就是我们刚刚转换的那段IP地址了。 ?

    2.7K20

    如何在 Python 中将数字转换为字母?

    在编程中,有时我们需要将数字转换为字母,例如将数字表示的年份转换为对应的字母表示,或者将数字编码转换为字母字符。Python 提供了多种方法来实现这种转换。...因此,可以通过将数字加上 65,然后使用 chr() 函数将其转换为对应的字母。...我们可以通过索引操作将数字转换为对应的字母。...通过将数字加上 65,然后使用 chr() 函数将其转换为对应的字母,和方法一类似。同时,我们还可以通过将字母减去 65,然后使用 ord() 函数将其转换为对应的数字。...通过使用 chr() 函数,我们可以将数字转换为对应的字母。方法一和方法三中的示例代码展示了如何使用 chr() 函数来实现这一转换。这种方法简单直接,适用于将数字转换为大写字母 A-Z。

    2K40
    领券