找出数组的串联值【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)
- 复杂度