当前位置: 面试刷题>> 加一(经典算法150题)


题目描述

给定一个非负整数(表示为字符串),将该数加1。注意,当数字增加后,可能会产生新的最高位。

例如:

  • 输入:"123"
  • 输出:"124"

如果输入的数字接近整数的最大值,比如 "999",则输出应该是 "1000"。

示例代码

PHP 示例

function plusOne($digits) {
    $length = strlen($digits);
    $carry = 1; // 初始进位为1
    $result = '';

    for ($i = $length - 1; $i >= 0; $i--) {
        $sum = intval($digits[$i]) + $carry; // 当前位与进位相加
        $result = strval($sum % 10) . $result; // 取个位数并添加到结果字符串前
        $carry = floor($sum / 10); // 更新进位
    }

    if ($carry > 0) {
        $result = strval($carry) . $result; // 如果最高位有进位,则添加到结果字符串前
    }

    return $result;
}

// 示例
echo plusOne("123"); // 输出: 124
echo plusOne("999"); // 输出: 1000

Python 示例

def plusOne(digits):
    carry = 1
    result = []
    for digit in reversed(digits):
        total = int(digit) + carry
        result.append(str(total % 10))
        carry = total // 10

    if carry > 0:
        result.append(str(carry))

    return ''.join(reversed(result))

# 示例
print(plusOne("123"))  # 输出: 124
print(plusOne("999"))  # 输出: 1000

JavaScript 示例

function plusOne(digits) {
    let carry = 1;
    let result = [];

    for (let i = digits.length - 1; i >= 0; i--) {
        let sum = parseInt(digits[i]) + carry;
        result.unshift(sum % 10); // 将个位数添加到结果数组的前面
        carry = Math.floor(sum / 10); // 更新进位
    }

    if (carry > 0) {
        result.unshift(carry); // 如果最高位有进位,则添加到结果数组的前面
    }

    return result.join(''); // 将结果数组转换为字符串
}

// 示例
console.log(plusOne("123")); // 输出: 124
console.log(plusOne("999")); // 输出: 1000

以上代码示例均实现了题目要求的功能,即将给定的非负整数(字符串形式)加1,并处理进位情况。在面试中,能够清晰解释算法思路并正确实现是获得好评的关键。

推荐面试题