Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode刷题66加一
前文
本文为leetcode数组处理类型问题,题目序号为66,主要考察对于数组的操作,链接地址为https://leetcode-cn.com/problems/plus-one/。
题目信息
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
解题思路
根据题目信息,我们可以看出这是一道操作数组的问题。而题目中数组中的元素,实际代表整数的某位。然后对数组的最后一位元素加1,形成新的数组返回,本质上也就是对原有整数进行加一操作。这里我们采用一个循环的解法,首先利用一次循环,将原数组中的元素进行对应处理。当满一时要更新为0并向前进位。这样经过从后向前的遍历,即可得到一个与目标数组相反的数组。这时再将数组做翻转处理,即可最终得到我们所需要的解法。该思路是一种典型的空间换时间解法,时间复杂度相对而言比较高。
解题代码
public int[] plusOne(int[] digits) {
List<Integer> list = new ArrayList<>();
int temp = 1;
for (int i = digits.length - 1; i >= 0 ; i--) {
int item = digits[i] + temp;
if(item == 10){
temp = 1;
item = 0;
}else{
temp = 0;
}
list.add(item);
}
if(temp == 1){
list.add(temp);
}
Collections.reverse(list);
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。