你能告诉我为什么我的将数组转换为数字、加一并返回数组的代码只适用于某些数据集吗?

问题描述 投票:0回答:2

我正在尝试解决以下 Leetcode 问题:

给定一个大整数,表示为整数数组数字, 其中每个digits[i]是整数的第i位。数字是 从左到右从最重要到最不重要排序 命令。大整数不包含任何前导 0。

将大整数加一并返回结果数组 数字。

示例1:

输入:

digits = [1,2,3]
输出:
[1,2,4]
解释:数组 表示整数
123
。加 1 给出
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        
};

适用于许多数据集。在以下集合中出现以下错误。为什么:(

enter image description here

javascript arrays concatenation
2个回答
2
投票

当您执行

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)
));


0
投票
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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.