[算法]在数字N中删除S个数,使其最终余下的值最小
2007-03-18 00:39
316 查看
输入一个高精度的正整数N(N不超过200位),去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数:编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数字最小
private string Calc(string N, int S)
{
if (S <= 0) return N;
char c = N[0];
int j = 0;
for (int i = 1; i < N.Length - 1; i++)
if (c > N[i])
return Calc(N.Remove(j, 1), S - 1);
else if (c < N[i])
{
c = N[i];
j = i;
}
return N;
}
/*---演算过程
N=234[9]0293847213847958723489502319482035345983958727351925,S=20
N=23[4]0293847213847958723489502319482035345983958727351925,S=19
N=2[3]0293847213847958723489502319482035345983958727351925,S=18
N=[2]0293847213847958723489502319482035345983958727351925,S=17
N=02[9]3847213847958723489502319482035345983958727351925,S=16
N=023[8]47213847958723489502319482035345983958727351925,S=15
N=0234[7]213847958723489502319482035345983958727351925,S=14
N=023[4]213847958723489502319482035345983958727351925,S=13
N=02[3]213847958723489502319482035345983958727351925,S=12
N=0[2]213847958723489502319482035345983958727351925,S=11
N=0[2]13847958723489502319482035345983958727351925,S=10
N=013[8]47958723489502319482035345983958727351925,S=9
N=01347[9]58723489502319482035345983958727351925,S=8
N=0134[7]58723489502319482035345983958727351925,S=7
N=01345[8]723489502319482035345983958727351925,S=6
N=01345[7]23489502319482035345983958727351925,S=5
N=0134[5]23489502319482035345983958727351925,S=4
N=013[4]23489502319482035345983958727351925,S=3
N=01[3]23489502319482035345983958727351925,S=2
N=012348[9]502319482035345983958727351925,S=1
*/
private string Calc(string N, int S)
{
if (S <= 0) return N;
char c = N[0];
int j = 0;
for (int i = 1; i < N.Length - 1; i++)
if (c > N[i])
return Calc(N.Remove(j, 1), S - 1);
else if (c < N[i])
{
c = N[i];
j = i;
}
return N;
}
/*---演算过程
N=234[9]0293847213847958723489502319482035345983958727351925,S=20
N=23[4]0293847213847958723489502319482035345983958727351925,S=19
N=2[3]0293847213847958723489502319482035345983958727351925,S=18
N=[2]0293847213847958723489502319482035345983958727351925,S=17
N=02[9]3847213847958723489502319482035345983958727351925,S=16
N=023[8]47213847958723489502319482035345983958727351925,S=15
N=0234[7]213847958723489502319482035345983958727351925,S=14
N=023[4]213847958723489502319482035345983958727351925,S=13
N=02[3]213847958723489502319482035345983958727351925,S=12
N=0[2]213847958723489502319482035345983958727351925,S=11
N=0[2]13847958723489502319482035345983958727351925,S=10
N=013[8]47958723489502319482035345983958727351925,S=9
N=01347[9]58723489502319482035345983958727351925,S=8
N=0134[7]58723489502319482035345983958727351925,S=7
N=01345[8]723489502319482035345983958727351925,S=6
N=01345[7]23489502319482035345983958727351925,S=5
N=0134[5]23489502319482035345983958727351925,S=4
N=013[4]23489502319482035345983958727351925,S=3
N=01[3]23489502319482035345983958727351925,S=2
N=012348[9]502319482035345983958727351925,S=1
*/
相关文章推荐
- 在整数中删除数字,使得余下的数字按原次序组成的新数最小
- 在整数中删除数字,留下4个,使得余下的数字按原次序组成的新数最小
- 贪心算法:N位数删除K个数字,使剩下的数字串最小
- 在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小(不含0)
- 算法--找出与目标数字相同的字符组成的整数中比该数字大的数集中的最小数字
- java代码实现贪心算法删除数字问题
- 数字最小k分割(算法上机)
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- (顺序表)设计算法删除所有数字字符
- 给定一个整数,并允许将其删除n个数字,使得值最小,例:data:178593, 删除一个数字,result:17593
- 剑指offer-算法题练习:part6 旋转数组的最小数字
- 算法练习——排序后的数组删除重复数字
- (顺序表)设计算法删除所有数字字符
- POJ1655树的重心 问删除哪个点,使余下的各个子树结点个数的最大值最小.
- 《剑指Offer》算法题——“旋转数组”的最小数字
- 二叉查找树的查找,插入,最大/最小值查找,前驱/后续查找,删除算法[java]
- 九度OJ 1386 旋转数组的最小数字 【算法】
- 最简单的贪心算法--删除数字问题
- 最小/大堆删除元素算法
- [剑指offer]算法6 旋转数组的最小数字