我的Lintcode之路——?jiǎng)h除數(shù)字

給出一個(gè)字符串A, 表示一個(gè)n位正整數(shù), 刪除其中k位數(shù)字, 使得剩余的數(shù)字仍然按照原來(lái)的順序排列產(chǎn)生一個(gè)新的正整數(shù)。

找到刪除k個(gè)數(shù)字之后的最小正整數(shù)。

N<= 240,k<=N

您在真實(shí)的面試中是否遇到過(guò)這個(gè)題?

Yes

樣例

給出一個(gè)字符串代表的正整數(shù)A和一個(gè)整數(shù)k, 其中A = 178542,k = 4

返回一個(gè)字符串"12"

思路:

我的思路是這樣的。

第一個(gè)數(shù)字在[0,k]之間選一個(gè),如果選到第一個(gè)數(shù)字,下標(biāo)為i;

第二個(gè)數(shù)字一定從i+1繼續(xù)選。在[i+1,k+1]中選一個(gè)最小的,下標(biāo)為i1;

第三個(gè)數(shù)字一定要在第i1+1后繼續(xù)選。即在[i1+1,k+2]中選一個(gè)最小的;

。。。依此類(lèi)推。

所以在這里,我是要注意的兩個(gè)地方,即如何判斷是否第一次選數(shù)字?

還有一個(gè)如果出現(xiàn)了"012"這樣的情況,它不是我們需要的,而是需要“12”。所以需要判斷如果StringBuffer為空的時(shí)候,0不要加進(jìn)去~以下為我的參考代碼。

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();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容