D141 66. Plus One
题目链接
66. Plus One
题目剖析
以数组模式给定一个整数,并以数组模式返回给它加1后的后果。
例如:
Input [9]
Output [10]
Expected [1,0]
Input [1,9,9]
Expected [2,0,0]
解题思路
一开始我的想法是把数组拼接,而后+1,再拆成数组。但疏忽了它给定的整数可能会超过32位/64位的状况。遂放弃。
因为高位在前,低位在后,我采纳的是把数组反转过去的计划。当然,也能够先计算数组长度,再用for循环从后往前也是能够的。
在for循环中,咱们先给以后位数加1,看其是否溢出,即是否须要进位。
若加了1之后小于10,即不须要进位,那么前面的所有位数都不必进位。间接中断循环。否则把以后数字置零并持续循环。这里也能够+1取余来”兼容“不止加1的状况。
这里有两种状况:
- 在不减少位数的状况下实现进位,也就说+1之后不会扭转位数。
- 进位后位数会减少,也就是说数字全是9,+1之后最初须要再加个数字1。例如,[9], [9,9](99), [9,9,9](999)。本来是n位的,+1之后变成了n+1位。
依照下面给定的算法,会呈现最初是0的状况。这个时候须要手动补足数字1。
最初再把数组翻转回去即可。
最终代码
<?php
class Solution {
/**
* @param Integer[] $digits
* @return Integer[]
*/
function plusOne($digits) {
$revArr = array_reverse($digits);
foreach($revArr as $index => $num){
if(++$revArr[$index] < 10){
break;
}
$revArr[$index] = 0;
}
if($revArr[$index]===0){
$revArr[] = 1;
}
return array_reverse($revArr);
}
}
若感觉本文章对你有用,欢送用爱发电赞助。
发表回复