【每日一题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)

你可能感兴趣的:(每日一题,模拟,leetcode)