当前位置: 首页 > news >正文

解决移除数字问题的两种方法:暴力法和使用栈

题目

给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字

示例 1 :

输入:num = "1432219", k = 3
输出:"1219"
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。

示例 2 :

输入:num = "10200", k = 1
输出:"200"
解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

示例 3 :

输入:num = "10", k = 2
输出:"0"
解释:从原数字移除所有的数字,剩余为空就是 0 。

题目链接:. - 力扣(LeetCode)

移除数字是一个常见的问题,在某些情况下,我们需要从给定的数字中移除 k 个数字,以获得最小的可能结果。在本文中,我们将讨论两种解决这个问题的方法:暴力法和使用栈。

暴力法

暴力法是一种直观的方法,通过迭代查找当前范围内的最小值,并将其添加到结果中。然而,原始暴力法代码存在一些问题,例如时间复杂度较高,为O(N^2)。

python代码

class Solution:def removeKdigits(self, num: str, k: int) -> str:length = len(num)-kans=""left, right  = 0, len(num)-lengthwhile len(ans)<length:min_=num[left]for i in range(left, right+1):if num[i]<min_:min_=num[i]left=ians+=num[left]left+=1right +=1                                             return ans.lstrip("0") or "0"

使用栈的方法

为了优化移除数字问题的解决方案,我们可以利用栈这一数据结构。通过与栈顶元素比较,我们可以更高效地构建结果字符串。

python代码

class Solution:def removeKdigits(self, num: str, k: int) -> str:stack = []remain = len(num)-kfor i in num:while k and stack and stack[-1]>i:stack.pop()k-=1stack.append(i)return ''.join(stack[:remain]).lstrip("0") or "0"

总结

通过本文的讨论,我们了解了暴力法和使用栈两种不同的解决移除数字问题的方法。使用栈的方法能够降低时间复杂度,并提高效率。在实际应用中,根据具体需求,选择合适的方法可以更好地解决问题。

希望本文对你理解移除数字问题的解决方法有所帮助。感谢阅读!

详细题解:. - 力扣(LeetCode)

http://www.lryc.cn/news/312275.html

相关文章:

  • 高校宣讲会管理系统|基于Springboot的高校宣讲会管理系统设计与实现(源码+数据库+文档)
  • 6_怎么看原理图之协议类接口之LCD笔记
  • SpringCloud Alibaba 学习
  • 【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4
  • Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid
  • 随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费
  • 【语言学习】std::transform函数
  • Java开发面试准备,轻松搞定SpringBoot数据校验
  • 信呼OA普通用户权限getshell方法
  • MySQL进阶之(四)InnoDB数据存储结构之行格式
  • 【Qt学习笔记】(四)Qt窗口
  • 入侵和攻击模拟 (BAS) 技术应用实践
  • 数据结构(七)——线性表的基本操作
  • Python 系统学习总结(基础语法+函数+数据容器+文件+异常+包+面向对象)
  • 汽车碰撞与刮伤的实用维修技术,汽车的车身修复与涂装修补教学
  • 网络信息安全:nginx漏洞收集(升级至最新版本)
  • 【go从入门到精通】go包,内置类型和初始化顺序
  • 【项目实战】高并发内存池(仿tcmalloc)
  • 计算机等级考试:信息安全技术 知识点一
  • 开展庆2024年“三八”国际妇女节系列纪念活动怎样向媒体投稿?
  • SpringBoot-集成Elasticsearch
  • 数据结构之顺序表及其实现!
  • Vue组件间通信实践
  • FISCO BCOS区块链平台上的智能合约压力测试指南
  • LabVIEW流量控制系统
  • Python 爱心代码
  • linux kernel物理内存概述(五)
  • 3分钟带你搞定电流采样电阻选型
  • 代码随想录算法训练营Day52 | 300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
  • 一个测试OOM killer的程序未触发OOM所带来的问题