美文网首页LintCode刷题突击战!
我的Lintcode之路——删除数字

我的Lintcode之路——删除数字

作者: 徐不歪了 | 来源:发表于2017-05-29 21:58 被阅读0次

    给出一个字符串A, 表示一个n位正整数, 删除其中k位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。

    找到删除k个数字之后的最小正整数。

    N<= 240,k<=N

    您在真实的面试中是否遇到过这个题?

    Yes

    样例

    给出一个字符串代表的正整数A和一个整数k, 其中A = 178542,k = 4

    返回一个字符串"12"

    思路:

    我的思路是这样的。

    第一个数字在[0,k]之间选一个,如果选到第一个数字,下标为i;

    第二个数字一定从i+1继续选。在[i+1,k+1]中选一个最小的,下标为i1;

    第三个数字一定要在第i1+1后继续选。即在[i1+1,k+2]中选一个最小的;

    。。。依此类推。

    所以在这里,我是要注意的两个地方,即如何判断是否第一次选数字?

    还有一个如果出现了"012"这样的情况,它不是我们需要的,而是需要“12”。所以需要判断如果StringBuffer为空的时候,0不要加进去~以下为我的参考代码。

    public class Solution {
        /**
         *@param A: A positive integer which has N digits, A is a string.
         *@param k: Remove k digits.
         *@return: A string
         */
        public String DeleteDigits(String A, int k) {
            // write your code here
            char[] array=A.toCharArray();
            int length=A.length();
            int step=length-k;
            if(length==k)
                return "0";
            StringBuffer sb=new StringBuffer();
            
            int index=0;
            int j=0;
            
            while(step>0)
            {   
                int flag=1;
                if(step==length-k)//如果是第一次的话,就让flag=0;
                {
                    flag=0;
                }
                char min=58;
                for(int i=index+flag;i<=k+j;i++)
                {   
                    
                    int temp=array[i]-min;
                    if(temp<0)
                    {
                        index=i;
                        min=array[i];
                    }
                }
                if(sb.length()==0&&array[index]=='0')
                {}
                else{
                sb.append(array[index]);
                }
                step--;
                j++;
            }
            return sb.toString();
        }
    }
    

    相关文章

      网友评论

        本文标题:我的Lintcode之路——删除数字

        本文链接:https://www.haomeiwen.com/subject/osslfxtx.html