Open threedayAAAAA opened 1 year ago
function addToArrayForm(num: number[], k: number): number[] {
let remaining = k
let result = []
let currentIndex = num.length - 1
while(remaining > 0 || currentIndex >= 0){
if(currentIndex >= 0){
remaining += num[currentIndex]
currentIndex--
}
result.push(remaining % 10)
remaining = Math.floor(remaining / 10)
}
return result.reverse()
};
思路
- 默认remain为传入的K,标识需要加到下一个元素的值
- 倒序遍历数组,如果当前index已经小于0了,要给数组新增一个元素,并将index指针重置回0的位置【原因:处理remain比> 实际的num更大的情况】
- 当前元素的最新值为:当前计算的总数(即元素加上余数)再对10取余【原因:因为每个数组元素只存储单个数字,所以不> 会超过10】
- 根据当前计算的总数重新取remain,进入下一次循环
结束循环判断条件需要数组遍历结束并且remian为0 了才能退出循环【原因:处理remain比实际的num更大的情况】
代码
function addToArrayForm(num: number[], k: number): number[] { let remain = k; let index = num.length -1; while(remain > 0 || index > 0) { if (index < 0) { num.unshift(0); index = 0 } let total = num[index] + remain; num[index] = total % 10; index--; remain = Math.floor(total / 10); } return num; };
复杂度分析
- 时间复杂度:O(n)
空间复杂度:O(1)
思路
- 判断num和k的数组,谁长度比较长谁作为最终返回的数组,另一个作为加值
- 倒序遍历长度较长的数组,声明一个指针指向addArr的尾部,remain作为元素需要加的值,默认为当前指针指向的元素
- 每次遍历,新的当前元素以当前计算的总数(即remain+当前遍历的元素)对10取余作为最终的值,同时指针向前挪一位
- 根据当前计算的总数对10取整并加上当前指针指向的元素作为remain,进入下一次循环
循环完成,判断remain是否为0,不为0的话则数组要在头部插入该余数
代码
function addToArrayForm(num: number[], k: number): number[] { let addArr = String(k).split('').map(Number); let isExchange = num.length < addArr.length; let result = isExchange ? addArr : num; addArr = isExchange ? num : addArr; let addIndex = addArr.length - 1; let remain = Number(addArr[addIndex]); let len = result.length; for(let i = len -1; i >= 0; i--) { let total = result[i] + remain; result[i] = total % 10; addIndex--; remain = Math.floor(total / 10) + (Number(addArr[addIndex]) || 0); } if (remain > 0) { result.unshift(remain); } return result; };
复杂度分析
- 时间复杂度:O(n)
空间复杂度:O(n)
function addToArrayForm(num: number[], k: number): number[] {
let copyk = k, i = num.length - 1;
const result: number[] = [];
while(copyk > 0 || i >= 0) {
if ( i >= 0) {
copyk += num[i];
}
result.push(copyk % 10);
copyk = Math.floor(copyk / 10);
i--;
}
return result.reverse();
};
时间复杂度:O(n) 空间复杂度:O(1)
整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。
例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。
示例 1:
输入:num = [1,2,0,0], k = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234 示例 2:
输入:num = [2,7,4], k = 181 输出:[4,5,5] 解释:274 + 181 = 455 示例 3:
输入:num = [2,1,5], k = 806 输出:[1,0,2,1] 解释:215 + 806 = 1021
提示:
1 <= num.length <= 104 0 <= num[i] <= 9 num 不包含任何前导零,除了零本身 1 <= k <= 104
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/add-to-array-form-of-integer 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。