我正在尝试解决以下 Leetcode 问题:
给定一个大整数,表示为整数数组数字, 其中每个digits[i]是整数的第i位。数字是 从左到右从最重要到最不重要排序 命令。大整数不包含任何前导 0。
将大整数加一并返回结果数组 数字。
示例1:
输入:
输出:digits = [1,2,3]
解释:数组 表示整数[1,2,4]
。加 1 给出123
。因此,结果应该是123 + 1 = 124
。[1,2,4]
这是我的代码:
var plusOne = function(digits) {
let newDigit = digits.join('')
if (newDigit.length > 15) {
let digitLength = newDigit.length
let secondHalf = newDigit.slice(digitLength - 15, digitLength)
secondHalf = parseInt(secondHalf) + 1
secondHalf = Array.from(String(secondHalf), Number)
digits.splice(digitLength - 15, 15)
return digits.concat(secondHalf)
}
let Digit = parseInt(newDigit) + 1
const answer = Array.from(String(Digit), Number)
return answer
};
适用于许多数据集。在以下集合中出现以下错误。为什么:(
当您执行
parseInt(secondHalf)
时,您实际上会删除该字符串中的所有前导零,因此这些零不会包含在最终数组中。保证输入数字没有任何前导零,但这并不意味着如果您在中间分割字符串,就不会有任何前导零。
此外,即使解决了这个问题,输入数组长度超过 30 个字符又如何?
考虑使用 BigInt 来代替,会容易很多。
const plusOne = function(digits) {
const bigInt = BigInt(digits.join('')) + 1n;
return [...String(bigInt)].map(Number);
}
console.log(plusOne(
'590840235570031372488506112'.split('').map(Number)
));
public int[] PlusOne(int[] nums) {
string initialValue = "";
foreach(int i in nums) {
initialValue += i.ToString();
}
long value = long.Parse(initialValue) + 1;
int[] resValue = new int[value.ToString().Length];
for(int i=0; i< value.ToString().Length; i++) {
Console.WriteLine("Value is " + value.ToString()[i]);
resValue[i] = (int)Char.GetNumericValue(value.ToString()[i]);
}
// return value.ToString().Split();
// return Array.ConvertAll(value.ToString().Split(), p => Int32.Parse(p) );
// return (from person in value.ToString().Split() select Int32.Parse(person)).ToArray();
// return value.ToString().Select(c => (int)Char.GetNumericValue(c));
return resValue;
}