Delete Digits
2015-09-07 20:20
344 查看
Given string A representative a positive integer which has N digits, remove any k digits of the number, the remaining digits are arranged according to the original order to become a new positive integer.
Find the smallest integer after remove k digits.
N <= 240 and k <= N,
xample
Given an integer A =
k =
return a string
首先要理解题目的意思,题目是说在原整数的顺序基础上删除,删除之后要保留之前的顺序。那如何才能确定某个数该删除,假如有个整数453,现在要删除一个元素,如何选择删除一个元素使得数最小,我们人工会选择删除5,得到43;那为什么这样删除可以保证得到满足题意的结果,假如现在在位置4处,如果删除4会使得到53,如果不删除4,删除5,会得到43,也就是说对于i位置的数a[i] <= a[i + 1], 那么不应该删除i处的数,因为删除i处的数比删除i+1处的数更大,所以不能删除第i处的数;反之则应该删除;这样就有了如何确定某个数是否应该删除的数学依据。在实现的时候,很多细节需要考虑。
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 lenA = A.size();
if(lenA < k || lenA == k)
return "";
if(k <= 0)
return A;
string ans = "";
int index = 0;
while(index < lenA){
if(index < (lenA - 1)){
if(A[index] <= A[index + 1])
{
if(ans.size() > 0 || A[index] != '0')
ans.push_back(A[index]);
}
else if(A[index] > A[index + 1] && k > 0){
--k;
Find the smallest integer after remove k digits.
N <= 240 and k <= N,
xample
Given an integer A =
"178542",
k =
4
return a string
"12"
首先要理解题目的意思,题目是说在原整数的顺序基础上删除,删除之后要保留之前的顺序。那如何才能确定某个数该删除,假如有个整数453,现在要删除一个元素,如何选择删除一个元素使得数最小,我们人工会选择删除5,得到43;那为什么这样删除可以保证得到满足题意的结果,假如现在在位置4处,如果删除4会使得到53,如果不删除4,删除5,会得到43,也就是说对于i位置的数a[i] <= a[i + 1], 那么不应该删除i处的数,因为删除i处的数比删除i+1处的数更大,所以不能删除第i处的数;反之则应该删除;这样就有了如何确定某个数是否应该删除的数学依据。在实现的时候,很多细节需要考虑。
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 lenA = A.size();
if(lenA < k || lenA == k)
return "";
if(k <= 0)
return A;
string ans = "";
int index = 0;
while(index < lenA){
if(index < (lenA - 1)){
if(A[index] <= A[index + 1])
{
if(ans.size() > 0 || A[index] != '0')
ans.push_back(A[index]);
}
else if(A[index] > A[index + 1] && k > 0){
--k;
<span style="white-space:pre"> </span> //对于之前没有删除的数,需要检查是否也要删除 while(ans.size() && k > 0 && ans[ans.size() - 1] > A[index + 1]){ --k; ans.pop_back(); } } else ans.push_back(A[index]); } else ans.push_back(A[index]); ++index; } //如果出现了ans为递增序列,而且删除数不够,则直接从ans后面删除较大的数 while(k > 0){ ans.pop_back(); --k; } return ans; } };
相关文章推荐
- oracle数据库删除数据Delete语句和Truncate语句的使用比较
- delete from 表名与truncate table 表名区别
- drop,truncate与delete的区别
- mysql delete limit 使用方法详解
- MySQL DELETE语法使用详细解析
- ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
- sqlserver中delete、update中使用表别名和oracle的区别
- SQL Server中的XML数据进行insert、update、delete
- 浅析drop user与delete from mysql.user的区别
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- C++中new与delete、malloc与free应用分析
- 数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)
- mysql 删除操作(delete+TRUNCATE)
- Linq to SQL Delete时遇到问题的解决方法
- javascript中的delete使用详解
- 浅析删除表的几种方法(delete、drop、truncate)
- MySQL删除数据Delete与Truncate语句使用比较
- JavaScript delete操作符应用实例
- javascript delete 使用示例代码
- js delete 用法(删除对象属性及变量)