算法问题-删除k个数字是num最小
删除k个数字是num最小
案例:
5 4 1 2 7 0 9 3 6 删掉一个数字后是 4 1 2 7 0 9 3 6
123456; //12345
0000 //0
package algorithm.removedigits;
public class RemoveDIgits {
/**
* 删掉k个数字使当前留下的数字最小
* 5 4 1 2 7 0 9 3 6 删掉一个数字后是 4 1 2 7 0 9 3 6
*
* @param num
* @return
*/
public static int removeDigits(int num, int k) {
//如果所有位数都是0 直接返回0 就好
if(num == 0){
return 0;
}
StringBuffer sb = new StringBuffer();
String n = String.valueOf(num);
char[] chars = n.toCharArray();
//遍历到第几位的索引
int index = 0;
for (int j = 0; j < k; j++) {
for (int i = 1; i < chars.length; i++) {
if (chars[i] < chars[i - 1]) {
sb.append(chars[i]);
break;
} else {
sb.append(chars[i - 1]);
}
index = i;
}
}
//index + 1 是因为遍历的索引是当前比较过的位置,所以要从下一位开始
//加k是因为原数组已经被截取了k位,所以也要算上
//需要考虑本题必须截取k位,所以如果是123456 k = 1,那么返回结果是12345 6要截取掉
for (int i = index + 1+ k; i < chars.length; i++) {
sb.append(chars[i]);
}
return Integer.valueOf(sb.toString());
}
public static void main(String[] args) {
// int num = 541270936; //51270936
// int num = 123456; //12345
int num = 00000; //0
int k = 1;
System.out.println(removeDigits(num, k));
}
}
不恋尘世浮华,不写红尘纷扰
标签:
leetcode刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2020-11-26 Navicat远程连接不上mysql解决方案
2020-11-26 windows系统如何查看端口被占用、杀进程
2020-11-26 mysql01-mysql基础知识
2019-11-26 leetcode一刷总结,明天二刷
2019-11-26 多线程总结