删除数字-LintCode

来源:互联网 发布:湖南卫视杜海涛知乎 编辑:程序博客网 时间:2024/06/07 21:45

给出一个字符串 A, 表示一个 n 位正整数, 删除其中 k 位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。
找到删除 k 个数字之后的最小正整数。
N <= 240, k <= N
样例:
给出一个字符串代表的正整数 A 和一个整数 k, 其中 A = 178542, k = 4
返回一个字符串 “12”

#ifndef C182_H#define C182_H#include<iostream>#include<string>using namespace std;class Solution {public:    /**    *@param A: A positive integer which has N digits, A is a string.    *@param k: Remove k digits.    *@return: A string    */    string DeleteDigits(string A, int k) {        // wirte your code here        int len = A.size();        if (len <= k)            return NULL;        string s;        int pos = -1;        int m = len - k;        while (m != 0)        {            pos = findMin(A, pos+1, len - m);            s += A[pos];            --m;        }        int size = s.size();        int j = 0;        for (int i = 0; i < size; ++i)        {            if (s[i] != '0')            {                j = i;                break;            }        }        return s.substr(j);    }    int findMin(string s, int i, int j)    {        int pos=i;        for (int k = i; k <= j; ++k)            {                if (s[pos] - s[k] > 0)                    pos = k;            }        return pos;    }};#endif