列表

详情


1881. 插入后的最大值

给你一个非常大的整数 n 和一个整数数字 x ,大整数 n 用一个字符串表示。n 中每一位数字和数字 x 都处于闭区间 [1, 9] 中,且 n 可能表示一个 负数

你打算通过在 n 的十进制表示的任意位置插入 x最大化 n数值 ​​​​​​。但 不能 在负号的左边插入 x

返回插入操作后,用字符串表示的 n 的最大值。

 

示例 1:

输入:n = "99", x = 9
输出:"999"
解释:不管在哪里插入 9 ,结果都是相同的。

示例 2:

输入:n = "-13", x = 2
输出:"-123"
解释:向 n 中插入 x 可以得到 -213、-123 或者 -132 ,三者中最大的是 -123 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string maxValue(string n, int x) { } };

java 解法, 执行用时: 15 ms, 内存消耗: 43 MB, 提交时间: 2023-09-07 00:01:43

class Solution {
	public String maxValue(String n, int x) {
		int p = 0;
		StringBuffer ans = new StringBuffer(n);
		int X = x + '0';
		int len = n.length();
		if (n.charAt(0) == '-') {
			p++;
			while (p < len) {
				if (ans.charAt(p) > X) {
					break;
				}
				p++;
			}
		} else {
			while (p < len) {
				if (ans.charAt(p) < X) {
					break;
				}
				p++;
			}
		}
		return ans.insert(p, x).toString();
	}
}

python3 解法, 执行用时: 132 ms, 内存消耗: 16.9 MB, 提交时间: 2023-09-07 00:01:14

class Solution:
    def maxValue(self, n: str, x: int) -> str:
        start, flag, ln = 0, 1, len(n)
        if n[0] == '-':
            start, flag = 1, -1
        for i in range(start, ln):
            if x * flag > int(n[i]) * flag:
                return n[:i] + str(x) + n[i:]
        return n + str(x)

cpp 解法, 执行用时: 84 ms, 内存消耗: 31.2 MB, 提交时间: 2023-09-07 00:00:53

class Solution {
public:
    string maxValue(string n, int x) {
        int l = n.size();
        if (n[0] == '-'){
            for (int i = 1; i < l; ++i){
                if (n[i] - '0' > x){
                    n.insert(i, 1, '0' + x);
                    return n;
                }
            }
            n.push_back('0' + x);
            return n;
        }
        else {
            for (int i = 0; i < l; ++i){
                if (n[i] - '0' < x){
                    n.insert(i, 1, '0' + x);
                    return n;
                }
            }
            n.push_back('0' + x);
            return n;
        }

    }
};

python3 解法, 执行用时: 96 ms, 内存消耗: 16.9 MB, 提交时间: 2023-09-07 00:00:18

class Solution:
    def maxValue(self, n: str, x: int) -> str:
        x = str(x)
        i = 0
        if n[0] != '-':
            while i < len(n) and n[i] >= x:
                i += 1
        else:
            i = 1
            while i < len(n) and n[i] <= x:
                i += 1
        return n[:i] + x + n[i:]

golang 解法, 执行用时: 24 ms, 内存消耗: 6.8 MB, 提交时间: 2023-09-06 23:59:58

/**
 * 对于正数,插入位置左侧的数字都必须 ≥x
 * 对于负数,插入位置左侧的数字都必须 ≤x
 */
func maxValue(n string, x int) string {
	y := byte('0' + x)
	i := 0
	if n[0] != '-' {
		for ; i < len(n) && n[i] >= y; i++ {}
	} else {
		for i = 1; i < len(n) && n[i] <= y; i++ {}
	}
	return n[:i] + string(y) + n[i:]
}

上一题