一个正整数去掉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;}}}欢迎指正, 如有什么意见,请给我留言..........
- 一个正整数去掉s位后得到最小整数
- 算法题—n位正整数去掉k(k<=n)位数字得到最小数
- 键盘输入一个高精度的正整数n(<=240位),去掉任意s(s<n)个数字后,将剩下的数字按原左右次序组成一个新的正整数。
- n个正整数联接成一排,组成一个最小的多位整数
- n个正整数,联接成一排,组成一个最小(最大)的多位整数
- n个正整数联接成一排,组成一个最小的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最小的多位整数
- n个正整数,联接成一排,组成一个最大(最小)的多位整数 python
- 贪婪算法--去掉 n 位正整数中的 s 位
- 一个整数的每个数位都平方后求和,又得到一个整数,我们称这个整数为:位平方和。
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。
- 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:12
- 输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对所给的n和s,寻找一种方案使得剩下的数字组成的新数最小。
- 得到一个整数的 个、十、百、千位
- N个正整数联接成最小整数
- 正整数连接(变为最小整数)
- 贪心算法——n个数连接得到最小或最大的多位整数
- 《算法之美》のn个数连接得到最小的多位整数
- 网站制作---科讯万能搜索系统的简单实用教程
- 结构体对其问题
- Asp.net Basic Part(1)
- linux- Shell变量命令之单引号与双引号的区别
- fsockopen学习笔记
- 一个正整数去掉s位后得到最小整数
- Leetcode: Gas Station
- POJ 2104 K-th Number
- 在windows下双击可执行jar文件不可以执行的问题
- Android开发中Activity与Service之间getSharedPreferences不同步的解决方法
- OCP-1Z0-053-V12.02-529题
- CompanyOfHeroes2渲染技术
- 面向对象和生活的切合点。
- paip.python 调用qt ui 总结