class Solution {
public:
long long findTheArrayConcVal(vector<int>& nums) {
}
};
6354. 找出数组的串联值
给你一个下标从 0 开始的整数数组 nums
。
现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。
15
和 49
的串联是 1549
。nums
的 串联值 最初等于 0
。执行下述操作直到 nums
变为空:
nums
中存在不止一个数字,分别选中 nums
中的第一个元素和最后一个元素,将二者串联得到的值加到 nums
的 串联值 上,然后从 nums
中删除第一个和最后一个元素。nums
的串联值上,然后删除这个元素。返回执行完所有操作后 nums
的串联值。
示例 1:
输入:nums = [7,52,2,4] 输出:596 解释:在执行任一步操作前,nums 为 [7,52,2,4] ,串联值为 0 。 - 在第一步操作中: 我们选中第一个元素 7 和最后一个元素 4 。 二者的串联是 74 ,将其加到串联值上,所以串联值等于 74 。 接着我们从 nums 中移除这两个元素,所以 nums 变为 [52,2] 。 - 在第二步操作中: 我们选中第一个元素 52 和最后一个元素 2 。 二者的串联是 522 ,将其加到串联值上,所以串联值等于 596 。 接着我们从 nums 中移除这两个元素,所以 nums 变为空。 由于串联值等于 596 ,所以答案就是 596 。
示例 2:
输入:nums = [5,14,13,8,12] 输出:673 解释:在执行任一步操作前,nums 为 [5,14,13,8,12] ,串联值为 0 。 - 在第一步操作中: 我们选中第一个元素 5 和最后一个元素 12 。 二者的串联是 512 ,将其加到串联值上,所以串联值等于 512 。 接着我们从 nums 中移除这两个元素,所以 nums 变为 [14,13,8] 。 - 在第二步操作中: 我们选中第一个元素 14 和最后一个元素 8 。 二者的串联是 148 ,将其加到串联值上,所以串联值等于 660 。 接着我们从 nums 中移除这两个元素,所以 nums 变为 [13] 。 - 在第三步操作中: nums 只有一个元素,所以我们选中 13 并将其加到串联值上,所以串联值等于 673 。 接着我们从 nums 中移除这个元素,所以 nums 变为空。 由于串联值等于 673 ,所以答案就是 673 。
提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 104
原站题解
rust 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2023-10-12 07:42:43
impl Solution { pub fn find_the_array_conc_val(nums: Vec<i32>) -> i64 { let mut ans = 0i64; let mut i = 0; let mut j = nums.len() - 1; while i < j { let mut x = nums[i]; let mut y = nums[j]; while y != 0 { x *= 10; y /= 10; } ans += (x + nums[j]) as i64; i += 1; j -= 1; } if i == j { ans += nums[i] as i64; } ans } }
javascript 解法, 执行用时: 68 ms, 内存消耗: 42 MB, 提交时间: 2023-10-12 07:42:09
/** * @param {number[]} nums * @return {number} */ var findTheArrayConcVal = function(nums) { let ans = 0; for (let i = 0, j = nums.length - 1; i <= j; i++, j--) { if (i < j) { ans += parseInt(nums[i].toString() + nums[j].toString()); } else { ans += nums[i]; } } return ans };
cpp 解法, 执行用时: 4 ms, 内存消耗: 9.1 MB, 提交时间: 2023-10-12 07:41:55
class Solution { public: long long findTheArrayConcVal(vector<int>& nums) { long long ans = 0; for (int i = 0, j = nums.size() - 1; i <= j; i++, j--) { if (i != j) { ans += stoi(to_string(nums[i]) + to_string(nums[j])); } else { ans += nums[i]; } } return ans; } };
java 解法, 执行用时: 9 ms, 内存消耗: 41.4 MB, 提交时间: 2023-02-13 10:26:28
class Solution { public long findTheArrayConcVal(int[] nums) { long sum = 0L; int len = nums.length; // 头尾双指针 for (int i = 0, j = len - 1; i <= j; i++, j--) { if (i == j) { sum += nums[i]; } else { sum += Integer.parseInt(nums[i] + "" + nums[j]); } } return sum; } }
golang 解法, 执行用时: 4 ms, 内存消耗: 2.8 MB, 提交时间: 2023-02-13 10:25:37
func findTheArrayConcVal(a []int) (ans int64) { for len(a) > 1 { x := a[0] for y := a[len(a)-1]; y > 0; y /= 10 { x *= 10 } ans += int64(x + a[len(a)-1]) a = a[1 : len(a)-1] } if len(a) > 0 { ans += int64(a[0]) } return }
python3 解法, 执行用时: 40 ms, 内存消耗: 15.1 MB, 提交时间: 2023-02-13 10:25:21
class Solution: def findTheArrayConcVal(self, nums: List[int]) -> int: ans, i, j = 0, 0, len(nums) - 1 while i < j: x, y = nums[i], nums[j] while y: x *= 10 y //= 10 ans += x + nums[j] i += 1 j -= 1 if i == j: ans += nums[i] return ans