找出数组的串联值【LC2562】
给你一个下标从 0 开始的整数数组
nums。现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。
- 例如,
15和49的串联是1549。
nums的 串联值 最初等于0。执行下述操作直到nums变为空:
- 如果
nums中存在不止一个数字,分别选中nums中的第一个元素和最后一个元素,将二者串联得到的值加到nums的 串联值 上,然后从nums中删除第一个和最后一个元素。- 如果仅存在一个元素,则将该元素的值加到
nums的串联值上,然后删除这个元素。返回执行完所有操作后
nums的串联值。
-
思路
按题意进行模拟,先计算每对元素 n u m s [ i ] nums[i] nums[i]和 n u m s [ n − i − 1 ] nums[n - i- 1] nums[n−i−1]的串联值,累加到结果中;如果数组长度为奇数,那么代表有单个元素剩余,将其累加到结果中
-
实现
class Solution { public long findTheArrayConcVal(int[] nums) { long res = 0L; int n = nums.length; for (int i = 0; i < (n + 1) / 2; i++){ if (i != n - i - 1){ long a = nums[i]; int b = nums[n - i - 1]; while (b > 0){ a *= 10; b /= 10; } a += nums[n - i - 1]; res += a; }else{ res += nums[i]; } } return res; } }- 复杂度
- 时间复杂度: O ( n ) \mathcal{O}(n) O(n)
- 空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
- 复杂度

文章描述了一个编程问题,如何计算给定整数数组nums的串联值,通过模拟操作过程,当数组中有多个元素时,将首尾元素相乘进位并累加,最后返回结果。解决方案的时间复杂度为O(n),空间复杂度为O(1)。

被折叠的 条评论
为什么被折叠?



