乐趣区

关于leetcode:Leetcode-PHP题解D141-66-Plus-One

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. 在不减少位数的状况下实现进位,也就说 + 1 之后不会扭转位数。
  2. 进位后位数会减少,也就是说数字全是 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);
    }
}

若感觉本文章对你有用,欢送用爱发电赞助。

退出移动版