找出数组的串联值【LC2562】
给你一个下标从 0 开始的整数数组 nums 。
现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。
例如,15 和 49 的串联是 1549 。
nums 的 串联值 最初等于 0 。执行下述操作直到 nums 变为空:
如果 nums 中存在不止一个数字,分别选中 nums 中的第一个元素和最后一个元素,将二者串联得到的值加到 nums 的 串联值 上,然后从 nums 中删除第一个和最后一个元素。
如果仅存在一个元素,则将该元素的值加到 nums 的串联值上,然后删除这个元素。
返回执行完所有操作后 nums 的串联值。
思路
按题意进行模拟,先计算每对元素nums[i]和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 )
空间复杂度:O ( 1 )