class Solution {
public:
/*
* @param A: A positive integer which has N digits, A is a string
* @param l: Remove k digits
* @return: A string
*/
string dp[][];
string inf;
string DeleteDigits(string &A, int l) {
// write your code here
if(A.size() == ) return "";
if(l == ) return A;
int len = A.length() - l;
for(int i = ; i < A.size(); ++i){
dp[i][] = "";
inf = inf + "";
}
for(int i = ; i < A.size(); ++i){
for(int j = ; j < A.size(); ++j){
dp[i][j] = inf;
}
}
vector<string> vec;
for(int i = ; i < A.length(); ++i){
stringstream ss;
ss << (A[i] - '');
vec.push_back(ss.str());
}
dp[][] = A.substr(,);
for(int i = ; i < vec.size(); ++i){
for(int k = ; k <= i + && k <= len; ++k){
for(int j = ; j < i; ++j){
if(k <= j + )
dp[i][k] = min(dp[j][k - ] + vec[i], min(dp[i][k], dp[j][k]));
else dp[i][k] = min(dp[j][k - ] + vec[i], dp[i][k]); if(k == ) dp[i][k] = min(dp[i][k], vec[i]);
}
// cout << dp[2][1] << endl;
} }
int len1 = dp[vec.size() - ][len].length();
for(int i = ; i < len1; ++i){
if(dp[vec.size() - ][len][i] != ''){
dp[vec.size() - ][len] = dp[vec.size() - ][len].substr(i,len1-i);
break;
}
}
return dp[vec.size() - ][len]; }
};

dp[i][j]代表以i结尾,长度为j的最小的字串 因为这个数字会很长 所以不能用数字来dp,必须用字符串来dp 注意一下因为是字符串 所以要去掉前导零

lintcode - 删除数字的更多相关文章

  1. T2988 删除数字【状压Dp+前缀和优化】

    Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...

  2. lintcode:数字组合III

    数字组合III 组给出两个整数n和k,返回从1......n中选出的k个数的组合. 您在真实的面试中是否遇到过这个题? Yes 样例 例如 n = 4 且 k = 2 返回的解为: [[2,4],[3 ...

  3. lintcode:数字组合 II

    数字组合 II 给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T.C中每个数字在每个组合中只能使用一次. 注意事项 所有的数字(包括目标数字)均为正整数. 元素组合(a ...

  4. lintcode:数字组合I

    数字组合I 给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T.C中的数字可以无限制重复被选取. 例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为: [7], ...

  5. react之redux增加删除数字

    比如在页面中添加和删除‘222’ action.js export const ADD= 'ADD'; export const RED='RED'; export const add=(str)=& ...

  6. LintCode 删除排序链表中的重复元素

    给定一个排序链表,删除所有重复的元素每个元素只留下一个. 样例 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3 ...

  7. COJ 删除数字

    试题描述 输入正整数N和M,在N中删除掉M位,能留下的最大整数是多少? 输入 正整数N和M 输出 留下的最大整数 输入示例 233390323 5 输出示例 9323 其他说明 1<=N< ...

  8. [LintCode]删除链表中的元素

    问题分析: 声明当前指针和上一个指针即可. 问题求解: public class Solution { public ListNode removeElements(ListNode head, in ...

  9. [LintCode] 删除链表中倒数第n个节点

    /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(in ...

随机推荐

  1. memset,memcpy,strcpy的使用与区别

    1.memset 原型:   extern void *memset(void *buffer, int c, int count); 功能:   把buffer所指内存区域的前count个字节设置成 ...

  2. 基于cookie实现用户验证

    #!/usr/bin/env python import tornado.ioloop import tornado.web class IndexHander(tornado.web.Request ...

  3. 使用git将代码传到github

    廖雪峰git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 注:add加入 ...

  4. 【总结整理】IFeatureBuffer

    IFeatureBuffer pRowBuffer = objTabWYDCQ_Tar.CreateFeatureBuffer(); pRowBuffer.Shape = SourceRow.Shap ...

  5. STM32 C++编程 002 GPIO类

    使用 C++ 语言给 STM32 编写一个 Gpio 类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编程 的专 ...

  6. HDOJ 4802 GPA

    Problem Description In college, a student may take several courses. for each course i, he earns a ce ...

  7. Java-数据结构与算法-选择排序与冒泡排序

    Java 选择排序与冒泡排序 1.DataSorter.java public class DataSorter { //冒泡排序法 //主要思路:按升序排序,数组元素两两比较,大的立即排后面 pub ...

  8. niginx隐藏入口文件index.php

    location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$ last; break; } }

  9. Linux-shell获取天气

    用Linux中的shell获取天气,本来觉的比较难,原来,真简单,个位数的代码就搞定. 获取对应城市天气 所有天气信息都从中国天气网获取.每一个城市多会对应一个id(比如,北京为101010100,因 ...

  10. 操作系统 Linux ex2 note

    locate filename 搜索文件 将当前用户目录下的文件清单输出到文件list1.txt(当前用户目录下)中.ls -l > list1.txt 利用管道命令将根(/)下所有修改日期在4 ...