遍历数组,把k加到最后一个元素num[n],把num[n]对10取余的余数加到结果res数组,对10取整后的结果重新赋给k;
循环上一步操作倒数第二个元素,直至数组遍历完或k值不大于0,则把剩下的数组元素或k加到res数组;
最后反转数组即可。
class Solution {
public List<Integer> addToArrayForm(int[] num, int k) {
List<Integer> res = new ArrayList<Integer>();
int n = num.length;
while(true){
if(n>0 && k>0){
num[--n] += k;
res.add(num[n] % 10);
k = num[n] / 10;
}else if(n>0){
res.add(num[--n]);
}else if(k>0){
res.add(k%10);
k /= 10;
}else{
break;
}
}
Collections.reverse(res);
return res;
}
}
复杂度分析
- 时间复杂度:O(max(n,logk)),其中n为数组的长度,k为k的位数。
- 空间复杂度:O(1),除了返回值以外,使用的空间为常数。