一个正整数去掉s位后得到最小整数

来源:互联网 发布:下载淘宝全套免费模板 编辑:程序博客网 时间:2024/05/16 16:19

题目具体描述:

  键盘输入一个高精度的正整数N(N不超过200位),去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数:编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数字最小.

输入: 一个高精度的整数,求掉的元素个数s

输出:一个最小的整数(假设:0开头的整数小于任意的长度相同的非0开头的整数

算法思想: 构建一个栈,遍历整数的每位元素,使其与栈顶元素比较,如果小于栈顶元素,栈抛出栈顶元素且s--,继续比较直到其不小于栈顶元素,将其压入栈中,如果栈中的元素为0,则直接push栈中。同时如果当s==0时,不进行比较直接加入栈中。可能语言表达能力不是很好,如果您感觉表达比较混乱,请直接看代码就OK了。

代码实现

import java.util.ArrayList;import java.util.List;import java.util.Scanner;/* 键盘输入一个高精度的正整数N(N不超过200位), 去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数:编程对给定的N和S, 寻找一种方案使得剩下的数字组成的新数字最小. *//* * 如何考虑首位为0的整数 */public class TestMin {public static void main(String[] args) {Scanner inScanner = new Scanner(System.in);String testShuString = inScanner.nextLine();int s = inScanner.nextInt();inScanner.close();System.out.println(new TestMin().getResult2(testShuString, s));}/* * 思想:用栈来存储 */public String getResult2(String testString, int k) {char[] shuchars = testString.toCharArray();Mystack<Character> mystack = new Mystack<Character>();/* * 遍历string,加入栈 */for (int i = 0; i < shuchars.length; i++) {while (mystack.size() > 0 && shuchars[i] < mystack.getTopItem()&& k > 0) {mystack.pop();k--;}mystack.push(shuchars[i]);}char[] result = new char[mystack.size()];for (int j = 0; j < result.length; j++) {result[j] = mystack.pop();}return reserve(result, shuchars.length - k);}/* * 翻转字符串,并取得指定的长度 */private String reserve(char[] s, int k) {char[] reserveString = new char[k];for (int i = 0, j = s.length - 1; i < reserveString.length && j > 0; i++, j--) {reserveString[i] = s[j];}return new String(reserveString);}class Mystack<T> {List<T> mylist;public Mystack() {mylist = new ArrayList<T>();}/* * push */void push(T item) {mylist.add(item);}/* * pop */T pop() {if (mylist.size() > 0) {return mylist.remove(mylist.size() - 1);} else {return null;}}/* * stack中已有的元素 */int size() {return mylist.size();}T getTopItem() {if (mylist.size() > 0) {return mylist.get(mylist.size() - 1);}return null;}}}
欢迎指正, 如有什么意见,请给我留言..........

原创粉丝点击