【每日一题Day345】LC2562找出数组的串联值 | 模拟

找出数组的串联值【LC2562】

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

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

  • 例如,1549 的串联是 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[ni1]的串联值,累加到结果中;如果数组长度为奇数,那么代表有单个元素剩余,将其累加到结果中

  • 实现

    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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值