跳至主要內容

2259-移除指定数字得到的最大结果

daipeng大约 2 分钟

给你一个表示某个正整数的字符串 number 和一个字符 digit 。

从 number 中 恰好 移除 一个 等于 digit 的字符后,找出并返回按 十进制 表示 最大 的结果字符串。生成的测试用例满足 digit 在 number 中出现至少一次。

 

示例 1:

输入:number = "123", digit = "3"
输出:"12"
解释:"123" 中只有一个 '3' ,在移除 '3' 之后,结果为 "12" 。
示例 2:

输入:number = "1231", digit = "1"
输出:"231"
解释:可以移除第一个 '1' 得到 "231" 或者移除第二个 '1' 得到 "123" 。
由于 231 > 123 ,返回 "231" 。
示例 3:

输入:number = "551", digit = "5"
输出:"51"
解释:可以从 "551" 中移除第一个或者第二个 '5' 。
两种方案的结果都是 "51" 。
 

提示:

2 <= number.length <= 100
number 由数字 '1''9' 组成
digit 是 '1''9' 中的一个数字
digit 在 number 中出现至少一次

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-digit-from-number-to-maximize-result
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我们首先分情况讨论将某个digit从num中移除的情况:

  • num不含有digit 不用移除
  • num仅含有一个digit 移除该digit即可
  • num含有多个该digit 假如该digit后的数字比digit大,那么不应该删除该digit,除非是最后一个。比如2123,digit为2,那么显然应该删除第一个2。对于2425,那么应该删除第二个2.
 public String removeDigit(String number, char digit) {
        char[] chs = number.toCharArray();
        int count = 0;
        for (char ch : chs) {
            if (ch == digit) {
                count++;
            }
        }
        //假如只有一个digit
        if (count == 1) {
            int idx = 0;
            for (int i = 0; i < chs.length; i++) {
                if (chs[i] == digit) {
                    idx = i;
                    break;
                }
            }
            return number.substring(0, idx) + number.substring(idx + 1, chs.length);
        }else{
            int idx = 0;
            for (int i = 0; i < chs.length; i++) {
                if (chs[i] == digit) {
                    count--;
                    if(count == 0){ //假如是最后一个digit,那么只能删除这个
                        idx = i;
                        break;
                    }else if(i < chs.length - 1){ //假如不是最后一个而且后面还有数字,那么比较下,如果digit比后面的数字小,那么应该删除该digit。
                        if(chs[i+1] > digit){
                            idx = i;
                            break;
                        }
                    }
                }

            }
            return number.substring(0, idx) + number.substring(idx + 1, chs.length);
        }

    }

仔细观察代码,我们可以将两种情况合并成一种。

 public String removeDigit(String number, char digit) {
        char[] chs = number.toCharArray();
        int count = 0;
        for (char ch : chs) {
            if (ch == digit) {
                count++;
            }
        }
        //归并掉
            int idx = 0;
            for (int i = 0; i < chs.length; i++) {
                if (chs[i] == digit) {
                    count--;
                    if(count == 0){
                        idx = i;
                        break;
                    }else if(i < chs.length - 1){
                        if(chs[i+1] > digit){
                            idx = i;
                            break;
                        }
                    }
                }

            }
            return number.substring(0, idx) + number.substring(idx + 1, chs.length);

    }