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

移掉 K 位数字

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小,其中 解题思路 首先我们要了解一个关于数学的前置知识,对于两个相同长度的数字序列,最左边不同的数字决定了这两个数字的大小...,例如,对于 A = 1axxxA = 1axxx,B = 1bxxxB = 1bxxx,如果 a > b,则 A > B 基于此,我们可以知道,若要使得剩下的数字最小,需要保证靠前的数字尽可能小 如果使用暴力法...,那思路就是: 从左到右遍历 对于每一个遍历到的元素,前一个元素比当前元素大,则丢弃前一个元素,否则保留前一个元素 需要注意的是,如果给定的数字是一个单调递增的数字,那么我们的算法会永远选择不丢弃。...因此,对于每个数字,如果该数字小于栈顶元素,我们就不断地弹出栈顶元素,直到 栈为空 新的栈顶元素不大于当前数字 已经删除了 k 位数字 上述步骤结束后我们还需要针对一些情况做额外的处理: 如果我们删除了...m 个数字且 m<k,我们需要从序列尾部删除额外的 k-m 个数字 如果最终的数字序列存在前导零,我们要删去前导零 如果最终数字序列为空,我们应该返回 0 class Solution {

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

    移掉 K 位数字(LeetCode 402)

    循环上面的操作,直到移除 K 位数字。 我们以 4258 为例,如果要求我们删除两个数字。 第一次遍历,找到第一个大于右边的数字,为 4,所以删除 4 剩下 258。...比如 108 删除一位数字,那么删除 1 后,最终返回前需要将前导 0 去掉。...因此,对于每个数字,如果该数字小于栈顶元素,我们就不断地弹出栈顶元素,直到 栈为空 或者新的栈顶元素不大于当前数字 或者我们已经删除了 k 位数字 然后入栈。...如果已经删除了 k 位数字,那么将栈中数字与剩余数字拼接,去掉前导零后返回。 如果还没有删除 k 位数字,则继续遍历后面的数字直到遍历完。...移掉 K 位数字 - LeetCode

    15010

    Leetcode 357: 统计各位数字都不同的数字个数

    Leetcode 357: 统计各位数字都不同的数字个数 解法包括暴力解法和扩张方法。 暴力解法 直接对所有的数字求解,约为O(nlogn),目测必定超时,就不浪费时间了。...因此特殊的,定义dp[n-1][0]为第n位数为任意非0数时,n-1位为0时的重复数字个数 显而易见的是,dp[1][…]=0,长度为一位的时候不会有重复的数据。...最新的一位数据的内容主要包括两个方面: 之前已经重复的0:dp[n-1][0] = 10^{n-3} + \sum_{i\in Q_0}dp[n-2][i],包括最新的一个重复,加上之前的重复项目 更新完...其中Q_m表示个位数中除了m以外的集合,比如Q_1={0,2,3,…,9}。...因为不存在以0开头的数字。 数学方法 官方给的解法:含有d位数(2\geq d\leq 10)的各位数字都不同的数字x的个数可以由9\times A_{9}^{d-1}。

    85710

    Python3实现个位数字和十位数字对调, 其乘积不变

    位数13和62具有很有趣的性质,把它们个位数字和十位数字对调, 其乘积不变, 即 13 * 62 31 * 26 编程序求共有多少对这种性质的两位数,个位与十位相同的不在此列 如11、22 重复出现的不在此列...100) continue # 已经解决了11、22 重复出现的不在此列 和 13*62与62*13不在队列 for j in range(i + 1, 100): #遍历出数字并找出个位和十位...给出一个3位的正整数,你需要将这个整数中每位上的数字进行反转。例如:输入: 123,输出: 321 。大家先不看下面答案,看看如果是自己,可以想出几种Python方式来解决!...下面分别来说说几种实现的方式: 1、取余取整方式 class Test: def reverseInteger(self, number): g = number%10 #取出个位数...s = (int(number/10))%10 #取出十位数 b = int(number/100) #取出百位数 return g*100+s*10+b if __name

    1.1K10

    C语言中如何获取数组的中位数

    C语言中如何获取数组的中位数在C语言编程中,获取数组的中位数是一项常见而重要的任务。中位数是一个数组中的一个特殊值,它将该数组分为两个等长的部分。...当数组长度为奇数时,中位数就是位于数组中间位置的元素;当数组长度为偶数时,中位数是中间两个元素的平均值。7C语言中如何获取数组的中位数为了实现获取数组的中位数,我们可以使用以下步骤:1....- 当数组长度为偶数时,中位数的位置为 (数组长度 / 2) 和 (数组长度 / 2 + 1)。3. 获取位数的值:最后,根据确定的中位数的位置,我们可以从排序后的数组中获取位数的值。...然后,根据数组长度的奇偶性,确定中位数的位置,并从排序后的数组中获取位数的值。最后,我们在主函数中调用 `getMedian` 函数来获取数组的中位数,并将其打印出来。...通过以上步骤,我们可以轻松地在C语言中获取数组的中位数。中位数对于统计分析和数据处理非常重要,它能够提供对数组的集中趋势的直观了解。因此,在编程开发中,了解如何获取数组的中位数是非常有帮助的。

    68330

    移动设备上的多位数字识别

    对于多位数字识别,也有人进行门牌号码、车辆VIN(Vehicle Identification Number,车辆识别码)识别之类的研究。...但是,据我们所知,在移动设备上使用CNN进行多位数字识别尚未得到很好的研究。 移动解决方案具有许多优点:便携、便宜且拥有便捷的交互界面。但是,移动平台有其自身的约束,例如实时响应速度、有限的内存资源。...测试结果表明,虽然使用了相对较浅的CNN,在MNIST数据集上的单个数字识别仍可以达到99.07%的Top 1精度。通过使用上述优化方法,我们可以在大约60ms内处理一个图像帧,提取32位数字。...多位数字的识别过程包括: 预处理 将图像预处理为灰度图像,并使用Canny边缘检测来定位数字、放大数字并将背景设置为全黑以减少噪点。...在第一步中,我们使用轮廓查找器来定位每个数字位,并在每个数字位周围绘制边界框,然后通过计算和比较数字的位置,合并属于相同数的数字边界框。结果如图1(d)所示。

    1.9K20
    领券