2553. 分割数组中数字的数位

给你一个正整数数组 nums ,请你返回一个数组 answer ,你需要将 nums 中每个整数进行数位分割后,按照 nums 中出现的 相同顺序 放入答案数组中。

对一个整数进行数位分割,指的是将整数各个数位按原本出现的顺序排列成数组。

  • 比方说,整数 10921 ,分割它的各个数位得到 [1,0,9,2,1] 。

示例 1:

输入:nums = [13,25,83,77]
输出:[1,3,2,5,8,3,7,7]
解释:
- 分割 13 得到 [1,3] 。
- 分割 25 得到 [2,5] 。
- 分割 83 得到 [8,3] 。
- 分割 77 得到 [7,7] 。
answer = [1,3,2,5,8,3,7,7] 。answer 中的数字分割结果按照原数字在数组中的相同顺序排列。

示例 2:

输入:nums = [7,1,3,9]
输出:[7,1,3,9]
解释:nums 中每个整数的分割是它自己。
answer = [7,1,3,9] 。

 提示:

  • 1 <= nums.length <= 1000

  • 1 <= nums[i] <= 105

思路

  1. 使用List存值,转为数组返回

    1. 倒序遍历nums,通过取num(temp) 对 10 的模来获取最后一位,加入list中

    2. 如此循环,直到num(temp)为0止

    3. 由于结果是倒序的,所以新建一个数组,取list的倒序值即可

  2. 使用StringBuilder(让不同的结构优化时间复杂度也是一门学问)

    1. 使用StringBuilder拼接每一个num

    2. 新建一个数组,将字符转为int即可

代码

  1. 使用List存值,转为数组返回

class Solution {
    public int[] separateDigits(int[] nums) {
        List<Integer> list = new ArrayList<>();
        for (int i = nums.length - 1; i >= 0; i--) {
            int temp = nums[i];
            while (temp > 0) {
                list.add(temp % 10);
                temp = temp / 10;
            }
        }
        int[] result = new int[list.size()];
        for (int i = 0; i < result.length; i++) {
            result[i] = list.get(result.length - 1 - i);
        }
        return result;
    }
}
  1. 使用StringBuilder

class Solution {
    public int[] separateDigits(int[] nums) {
        StringBuilder sb = new StringBuilder();
        for (int i : nums) {
            sb.append(i);
        }
        int[] result = new int[sb.length()];
        for (int i = 0; i < sb.length(); ++i) {
            result[i] = sb.charAt(i) - '0';
        }
        return result;
    }
}