当前位置: 面试刷题>> 加一(经典算法150题)
### 题目描述
给定一个非负整数(表示为字符串),将该数加1。注意,当数字增加后,可能会产生新的最高位。
例如:
- 输入:"123"
- 输出:"124"
如果输入的数字接近整数的最大值,比如 "999",则输出应该是 "1000"。
### 示例代码
#### PHP 示例
```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 示例
```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 示例
```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,并处理进位情况。在面试中,能够清晰解释算法思路并正确实现是获得好评的关键。