当前位置:首页 > 未命名 > 正文内容

移除 K 位得到最小值

淙嶙6年前 (2020-07-22)未命名1740

描述


有一行由正数组成的数字字符串,移除其中的 K 个数,使剩下的数字是所有可能中最小的。

假设:
 字符串的长度一定大于等于 K
 字符串不会以 0 开头


输入


一行由正整数组成的数字字符串,和一个正整数 K,两个数据由英文逗号隔开,如:1432219,3。


输出


移除 K 位后可能的最小的数字字符串。
如 1432219 移除 4, 3, 2 这 3 个数字后得到 1219,为所有可能中的最小值。


输入样例

1432219,3
10200,1

输出样例

1219
200


private static String solution(String line) {
    // 在此处理单行数据
    // 在此处理单行数据
String  a[] = line.split(",");
String str = a[0];
int count = Integer.parseInt(a[1]);
Node n = new Node(str.charAt(0)-48);
int arr[] = new int[str.length()-1];
for (int i = 1; i < str.length() ; i++){
char c = str.charAt(i);
arr[i-1] = (c - 48);
}
n.addNode(arr, 0);
Node root = n.deleteNode(count);
   // 返回处理后的结果
   return root==null?"0":root.nodeToStr();
}
static class Node {
Node left;
Node right;
Node parent;
int data;
public Node(int data){
this.data = data;
}
public Node addNode(int[] a, int index){
Node p = this;
Node n = new Node(a[index]);
n.parent = p;
if (p.data > a[index]){
p.left = n;
if(++index < a.length){
p.left.addNode(a, index);
}
}else{
p.right = n;
if(++index < a.length){
p.right.addNode(a, index++);
}
}
return n;
}
public String nodeToStr(){
StringBuilder sb = new StringBuilder();
Node n = this;
while(n != null){
sb.append(n.data);
if(n.left!=null){
n = n.left;
}else{
n = n.right;
}
}
return sb.toString();
}
public Node deleteNode(int count){
Node p = this;
Node root = this;
while(count > 0 && p !=null){
if(p.right != null){
p = p.right;
continue;
}else{
 if(p.left != null){
 if(p.parent != null){
 if(p.parent.data > p.left.data){
 p.left.parent = p.parent;
 p.parent.left = p.left;
 p = p.parent;
 p.right = null;
 }else{
 p.left.parent = p.parent;
 p.parent.right = p.left;
 p = p.left;
 }
 }else{
 p = p.left;
 while(p != null && p.data == 0){
 if(p.right != null){
 p = p.right ;
 }else{
 p = p.left;
 }
}
root = p;
if(p != null){
p.parent = null;
}
 }
 count--;
}else{
break;
}
}
}
return root;
}
}

相关文章

docker 简介

docker 简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布...

找出单独出现的数字

找出单独出现的数字

描述 给出N个数字。其中仅有一个数字出现过一次,其他数字均出现过两次,找出这个出现且只出现过一次的数字。要求时间和空间复杂度最小。 输入 输入多个数字,每个数字以空格分开,回车结束...

Spring@Service的默认bean名称

Spring@Service的默认bean名称

若类名字为Abc,则生成bean的实例名字为abc若类名字为ABc,  则生成bean的实例名字为ABc验证结果,目录:LoginService.java (正常类)package ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。