插入后的最大值
-
题目:给你一个非常大的整数
n
和一个整数数字x
,大整数n
用一个字符串表示。n
中每一位数字和数字x
都处于闭区间[1, 9]
中,且n
可能表示一个负数 。 -
你打算通过在
n
的十进制表示的任意位置插入x
来 最大化n
的数值 。但不能在负号的左边插入x
。 -
例如,如果
n = 73
且x = 6
,那么最佳方案是将6
插入7
和3
之间,使n = 763
。 -
如果
n = -55
且x = 2
,那么最佳方案是将2
插在第一个5
之前,使n = -255
。 -
返回插入操作后,用字符串表示的
n
的最大值。
// 当 n 为正数时,插入位置左边的数都 >=x
// 当 n 为负数时,插入位置左边的数都 <=x
func maxValue(n string, x int) string {
m := byte('0' + x)
i := 0
if n[0] != '-' {
for ; i < len(n) && n[i] >= m; i++ {
}
} else {
for i = 1; i < len(n) && n[i] <= m; i++ {
}
}
return n[:i] + strconv.Itoa(x) + n[i:]
}
- 我先开始在思考时想把 n 转化成
int64
进行比较,但是会超出范围,而且就算可以通过,也会造成时间浪费。