列表

详情


6354. 找出数组的串联值

给你一个下标从 0 开始的整数数组 nums

现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。

nums 的 串联值 最初等于 0 。执行下述操作直到 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 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: long long findTheArrayConcVal(vector<int>& nums) { } };

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

上一题