可绝对贪婪问题 数字去掉几位求最小值

原创 2016年08月30日 22:46:28

参考

《算法设计与分析》

问题描述

输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原来左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。

输出应该包括所去掉的数字的位置和组成的新的正整数(N不超过240位)。

数据结构设计:高精度正整数的运算应存储为字符串格式。

问题分析

在位数固定的前提下,让高位的数字尽量小,其值就较小。依据此贪婪策略就可以解决这个问题。

如何根据贪婪策略删除数字呢?总目标是删除高位较大的数字,具体地相邻两位比较,若高位比低位大则删除高位。

代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def getMin(N, S):
    '''
    Function to get the min val after we remove S numbers from N.

    Example:

    >>> getMin('12435863', 3)
    '12353'
    >>> getMin('231183', 3)
    '113'
    >>> getMin('1234567', 3)
    '1234'
    >>> getMin('120083', 3)
    '3'
    >>> getMin('120083', 4)
    '0'
    '''
    src_len = len(N)
    dst_len = src_len - S
    for cnt in range(0, S):
        for i in range(1, len(N)):
            if N[i-1] > N[i]:
                N = N[:i-1] + N[i:]
                break
    if len(N) != dst_len:
        N = N[:dst_len-len(N)]
    while N[0] == '0' and len(N) != 1:
        N = N[1:]
    return N


if __name__ == '__main__':
    import doctest
    doctest.testmod()

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《SDUT1730 数字三角形问题》2关于数字三角形,求最小值最大值的N次纠结。

题目是这样的,给一个数字三角形,让你求和最大的路径,还有一个题是求和最小的路径,示例数据都是一样的, 所以没有贴那个题的图。 对于一个刚刚熟悉DP的萌新来说,开始拿到这道题是既有点激动又有点懵逼的。...

使用excel打开文件,修正长度过长的数字后几位变为0的问题

使用excel打开文件,修正长度过长的数字后几位变为0的问题
  • m0sh1
  • m0sh1
  • 2015-01-25 20:57
  • 1433

JAVA算法题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。   看到网上给出的程序,个人觉得还可以再优化一下。 网上程序为: import java.util.Scanne...

逆序输出数字并求最大最小值

1. /* 2. * Copyright (c) 2012, 烟台大学计算机学院 3. * All rights reserved. 4. * 作 者: 吕建 5. *...

【100题】第六十六~第七十题(颠倒栈、扑克牌顺子和掷骰子概率、数字数组排成最小数、求旋转数组中最小值、全排列)

一,颠倒栈。 1)题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。 2)分析:乍一看到这道题目,第一反...

POJ 2346 Lucky tickets(数位dp求前几位数字和)

Lucky tickets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3376 Accepted: 22...

用贪婪技术解数字迷塔问题

问题描述:解数字迷塔问题,即从每层取一个数字,上下两层取得数字必须相连,求取得的数字的最大和。 例:下图为一个数字迷塔图。最大和为:59。取出的数字为:9->12->10->18->10。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)