leetcode 402. Remove K Digits 贪心算法 + DFS深度优先遍历 + stack

2023-11-05

Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible.

Note:
The length of num is less than 10002 and will be ≥ k.
The given num does not contain any leading zero.
Example 1:

Input: num = “1432219”, k = 3
Output: “1219”
Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.
Example 2:

Input: num = “10200”, k = 1
Output: “200”
Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.
Example 3:

Input: num = “10”, k = 2
Output: “0”
Explanation: Remove all the digits from the number and it is left with nothing which is 0.

题意很简单,就是去掉k个bit,然后求剩下的值的所有可能中的最小值,第一个想到的方法就是和上一道题的DFS深度优先遍历的做法,但是会超时,我隐隐约约感觉到可能使用stack等来解决,但是不会做,于是网上找了个做法,

这道题和leetcode 321. Create Maximum Number 根据两个整数创造一个有k位的最大的数 + 贪心算法
如思路有点类似,果n是num的长度,我们要去除k个,那么需要剩下n-k个,我们开始遍历给定数字num的每一位,对于当前遍历到的数字c,进行如下while循环,如果res不为空,且k大于0,且res的最后一位大于c,那么我们应该将res的最后一位移去,且k自减1。当跳出while循环后,我们将c加入res中,最后我们将res的大小重设为n-k。根据题目中的描述,可能会出现”0200”这样不符合要求的情况,所以我们用一个while循环来去掉前面的所有0,然后返回时判断是否为空,为空则返回“0”

建议和leetcode 738. Monotone Increasing Digits 最大单调递增数字 一起学习

代码如下:

#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <bitset>

using namespace std;


class Solution 
{
public:
    string removeKdigits(string num, int k)
    {
        if (k >= num.size())
            return "0";
        string res = "";
        int count = k;
        for (char c : num)
        {
            while (count > 0 && res.size() > 0 && res.back() > c)
            {
                res.pop_back();
                count--;
            }
            res.push_back(c);
        }

        res = res.substr(0,num.length()-k);
        while (res.empty()== false && res[0] == '0') 
            res.erase(res.begin());
        return res.length()<=0 ? "0" : res;
    }


    //和上一道题一样,就是一个DFS做法,但是会超时
    vector<int> all;
    string removeKdigitsByDFS(string num, int k) 
    {
        if (k >= num.length())
            return "0";
        vector<int> bit(num.length(), 0);
        vector<int> flag(num.length(), 0);
        for (int i = 0; i < bit.size(); i++)
            bit[i] = (int)(num[i] - '0');

        getAll(0,k, flag, bit);

        int minRes = numeric_limits<int>::max();
        for (int one : all)
            minRes = min(minRes, one);
        return to_string(minRes);
    }

    void getAll(int begin,int k,vector<int>& flag,vector<int>& bit)
    {
        if (k == 0)
        {
            int a = 0;
            for (int i = 0; i < bit.size(); i++)
            {
                if (flag[i] == 0)
                    a = a * 10 + bit[i];
            }
            all.push_back(a);
        }
        else if (begin >= flag.size())
            return;
        else
        {
            getAll(begin + 1, k, flag, bit);

            flag[begin] = 1;
            getAll(begin + 1, k - 1, flag, bit);
            flag[begin] = 0;
        }
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode 402. Remove K Digits 贪心算法 + DFS深度优先遍历 + stack 的相关文章

  • 转:图谱中的关系推理是什么

    知识图谱本质上是语义网络 是一种基于图的数据结构 由节点 Point 实体 和边 Edge 关系 组成 在知识图谱里 每个节点表示现实世界中存在的 实体 每条边为实体与实体之间的 关系 知识图谱是关系的最有效的表示方式 通俗地讲 知识图谱就
  • Win10企业版本激活方法

    右键管理员身份运行cmd 或者直接Win键 X 直接打开Windows Powershell 管理员 粘贴下面的命令即可 slmgr skms kms 03k org slmgr ato
  • scrollIntoView()的方法属性及使用其实现锚点定位

    scrollIntoView 方法属性 在一个移动项目中遇到个这样的需求 一个表单填写页面 每项都有表单验证 并且点击提交按钮 未通过校验的输入框下边显示校验信息 同时页面滑动定位到第一个未通过校验的输入框 我们在完成这项需求时 使用的sc
  • GROUP BY 与 HAVING

    sql语句中GROUP BY 和 HAVING的使用 count http blog 163 com hks blog blog static 214926090201382225845920 ql中的group by 和 having 用
  • swagger 接口测试,用 python 写自动化时该如何处理?

    在使用Python进行Swagger接口测试时 可以使用requests库来发送HTTP请求 并使用json库和yaml库来处理响应数据 以下是一个简单的示例代码 import requests import json import yam
  • 排序算法性能分析

    目录 实现插入排序 冒泡排序 选择排序 合并排序 快速排序算法 从小到大 插入排序 冒泡排序 选择排序 快速排序 五种排序 现在有10亿的数据 每个数据四个字节 请快速挑选出最大的十个数 并在小规模数据上验证算法的正确性 方法一 规模为10
  • javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with pad

    今天在做AES加密时 项目中出现javax crypto IllegalBlockSizeException Input length must be multiple of 16 when decrypting with padded c
  • 关于centos7虚拟机的问题:主机无法ping通虚拟机

    这个问题困扰了我好几天 我创建好了虚拟机就用MX ssh远程连接 发现连接超时 再三确认ip 和端口过后 还是无法连接 后来尝试在虚拟机里ping主机ip 和网关 都没有问题 问题在于主机无法ping通虚拟机ip 好在 我在网上浏览了一篇文
  • MobaXterm远程登录VirtualBox中的Linux常见问题

    2020 12 02 1 先检查linux是否开启shh服务 ssh localhost 1 如果提示 ssh connect to host localhost port 22 Connection refused 则需要下载安装ssh
  • MMDeploy详解

    MMDeploy详解 1 简介 1 1 流程简介 1 1 1 模型转换 Model Converter 1 1 2 MMDeploy 模型 MMDeploy Model 1 1 3 推理 SDK Inference SDK 1 2 支持多种
  • 5年 Python 功力,总结了 10个开发技巧!高效率开发真正的秘诀(二)

    话接上文 我又来了分享我学习到的10个开发技巧啦 学习的路上 只有多多交流才能更好更快的解决难题 在这里还是要推荐下我自己建的Python学习Q群 249029188 群里都是学Python的 如果你想学或者正在学习Python 欢迎你加入
  • camera调试:serdes camera调试

    serdes是串行器和解串器的简写 顾名思义是一种将并行数据转换成串行数据发送 将接收的串行数据转换成并行数据的 器件 camera常用的接口是MIPI高速接口 MIPI的传输距离受限 传输距离过大容易导致信号质量不佳 影响图像数据的传输
  • 多组输入方法【C语言基础】

    EOF为End Of File的缩写 通常在文本的最后存在此字符表示资料结束 在C语言中 或更精确地说成C标准函数库中表示文件结束符 end of file 在while循环中以EOF作为文件结束标志 这种以EOF作为文件结束标志的文件 必
  • 在校大学生用Python当爬虫一个月能赚3000吗?

    这个问题我挺有发言权的 我人之前和现在就是靠Python撸代码挣零花钱的 现在校学生时间多 自由度大 都知道淘宝没有什么不能卖的 合法的 基本上不论软硬件 不论是实物或服务 我研究生期间在淘宝做过python数据分析的活 每月撸代码撸出生活
  • PS全套插件一键安装包Pro中文版

    PS全套插件一键安装包Pro安装教程 1 下载解压 得到软件的安装原程序 2 双击 Project1 exe 开始安装 点击继续 3 软件能自动识别Ps软件版本和安装位置 若电脑上有多个Ps软件版本 请选择需要安装插件的版本 若只有一个Ps
  • 2020-05-07

    可不可以有大神救救孩子 Python作业不会做
  • mysql驱动版本支持

    Connector J 5 1 支持Mysql 4 1 Mysql 5 0 Mysql 5 1 Mysql 6 0 alpha这些版本 Connector J 5 0 支持MySQL 4 1 MySQL 5 0 servers distri
  • ecahrts给地图添加贴图纹理

    有个可视化需求给地图添加纹理 翻了好久没翻到成品 希望这篇文章对后面的人有所帮助吧 虽然echarts文档里面也有说明 但是echarts文档对一些配置属性确实不敢恭维 实现是以html实现的 vue其实一样的道理 不会差距太大 html代
  • 数据库计算引擎的优化技术:向量化执行与代码生成

    原文链接 https zhuanlan zhihu com p 100933389 阿尔德里竹 作者 徐飞 李德竹 随着数据库软硬件技术的发展 经典的 SQL 计算引擎逐渐成为数据库系统的性能瓶颈 尤其是对于涉及到大量计算的 OLAP 场景

随机推荐

  • 【自学】恶意代码分析

    恶意代码分析 绿盟 李东宏老师 恶意样本分析手册 理论篇 API函数篇 常用方法篇 特殊方法篇 通讯篇 溯源篇 文件封装篇 工具篇 上 下 反调试篇 上 下 虚拟机检测篇 上 下 逆向心法修炼 FLARE ONCHALLENGE4TH FL
  • Qt知识笔记(七)—— 控件

    Qt知识笔记 七 控件 按钮组 QPushButton QToolButton QRadioButton QCheckBox 容器组 QFrame QGroup Box Scroll Area Tool Box Tab Widget Sta
  • 计算机开机没反应怎么办,告诉你电脑开机没反应怎么办

    小伙伴你们在使用电脑的过程中有木有遇到过开机没反应的现象呢 相信的将或多或少都有遇到过吧 那么小伙伴你们找到怎么解决这个问题吗 不知道的话 那么 下面就由小编来将解决电脑开机没反应的方法来告诉你们吧 在使用电脑的时候我们经常都会碰到这样或是
  • linux上传文件夹到hdfs,Linux上传本地文件到Hadoop的HDFS文件系统

    记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功 nodedate都成功启动 先切换到HDFS用户 创建一个input文件夹 zhangsf hadoop1 hdfs dfs mkdir input 查看创建的文件夹在
  • Pinctrl子系统_01_Pinctrl子系统介绍

    本节介绍在Pinctrl子系统中 将会学习哪些内容 Pinctrl作用 Pinctrl Pin Controller 顾名思义 就是用来控制引脚的 一个芯片有成百上千个引脚 这些引用要怎么配置 配置成什么功能 都是通Pinctrl子系统来实
  • Springboot 学习

    创建一个SpringBoot项目 勾选web场景 1 静态资源访问 1 1 类路径下的 static public resources 或是 META INFO resources 都可以访问 当前项目根路径 静态资源名 如controll
  • 10步完成SharePoint2010企业版管理中心配置向导

    10步完成SharePoint2010企业版管理中心配置向导 本文主题 SharePoint2010企业版管理中心配置向导 场服务器配置向导 前提 有安装Windows Server 2008R2 SQL Server 2008R2 Sha
  • WEB练题(1)

    NSSCTF gift F12 进入靶机网站后 按F12打开控制台 可见flag flag WLLMCTF We1c0me t0 WLLMCTF Th1s 1s th3 G1ft ctfshow web签到题 进入靶机网站后 显示如下 打开
  • could not acquire a semaphore for execution

    环境 spring boot starter 1 5 2 RELEASE spring cloud starter eureka 1 2 6 RELEASE jar spring cloud starter hystrix 1 2 6 RE
  • SDIO接口简单描述

    转 https www cnblogs com hellokitty2 p 10981084 html SDIO接口 一 SDIO简介 SDIO接口是在SD内存卡接口的基础上发展起来的接口 SDIO接口兼容以前的SD内存卡 并且可以连接SD
  • 2023华为od机试真题B卷 Python 实现【改造火星/广度优先搜索】

    题目 在未来的某一天 我们需要通过对火星的大气分析 但是我们不能一次性改造完成 每一次只能改造部分地区 待改造区域被划分为一个由row column的网格组成的区域 每个网格有三种可能的值 宜居区 YES 可改造区 NO 死亡区 NA 在最
  • tru64系统服务器,主流服务器设置比较(12页)-原创力文档

    主流服务器UNIX操作系统用户帐号的设置 账号设置 HP UX FreeBSD Solaris SPARC 密码文件 etc passwd tcb files auth r root etc passwd etc master passwd
  • SQLI-LABS Less-18 到 Less-19

    Header 请求头注入 User Agent Referer Cookie 注入点不同 注入手法相似 Less 18 User Agent 通常就是用户的浏览器相关信息 例如 User Agent Mozilla 5 0 X11 Linu
  • MYSQL的入门基础概述 部署 安装

    MySQL概述 1 平台 1 linux 2 win 数据分析 2 部署的方式 linux 1 rpm 方式部署 1 方便 2 学习 3 不能够定制化 2 tar包方式 二进制方式 3 版本 三大版本 5 6 5 7 主流 8 x 次主流
  • keil的终极配色方案(提供配置文件)

    1 效果图 先放效果图 本资源来源于网络下载整理 白色背景蓝色字体 使用说明 版本建议keil5 32 GB2321设置 这套配色需要你安装JetBrains Mono字体 JetBrains的字体真的太漂亮了 或者使用微软的YaHei C
  • QT 基础ui设计

    可视化ui设计 dialog头文件 ifndef DIALOG H define DIALOG H include
  • 最全的2021蓝桥杯算法课《算法很美》的学习笔记总目录+真题详解

    这里写目录标题 第一章 位运算 第二章 递归 第三章查找与排序 直接看真题 嗷嗷把奖拿 本系列是对最全的2021蓝桥杯算法课 算法很美 的笔记总结和归纳 学习视频 算法很美 第一章 位运算 1 1课程介绍 1 2题解 如何找数组中唯一成对的
  • Tomcat中给server.xml加入元素

    转载地址 http hdxiong iteye com blog 650539
  • kubeadm极速部署Kubernetes 1.24版本集群

    文章目录 kubeadm极速部署Kubernetes 1 24版本集群 一 Kubernetes 1 24版本集群部署 1 1 Kubernetes 1 24版本集群部署环境准备 1 1 1 主机操作系统说明 1 1 2 主机硬件配置说明
  • leetcode 402. Remove K Digits 贪心算法 + DFS深度优先遍历 + stack

    Given a non negative integer num represented as a string remove k digits from the number so that the new number is the s