Easy

题目描述

给你一个正整数数组 nums ,返回一个数组 answer ,该数组由 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] <= 10^5

提示:

  • 将每个数字转换为列表并将该列表附加到答案中
  • 你可以将整数转换为字符串来轻松完成此操作

解题思路

这道题要求我们将数组中的每个整数的数位分离出来,按顺序组成一个新数组。

解题思路

有两种常见的解法:

  1. 字符串方法:将每个数字转换为字符串,然后遍历字符串的每一位,将字符转回数字。这是最直观和简单的方法。

  2. 数学方法:通过除法和取模运算来提取每一位数字。不过需要注意数位的顺序,可能需要先提取再反转,或者使用递归。

推荐使用字符串方法,因为:

  • 代码更简洁易懂
  • 不需要考虑数位顺序问题
  • 性能在题目约束范围内完全够用

算法步骤

  1. 初始化结果数组
  2. 遍历输入数组中的每个数字
  3. 将当前数字转为字符串
  4. 遍历字符串的每一位,转为数字并添加到结果数组
  5. 返回结果数组

时间复杂度主要取决于所有数字的总位数,在最坏情况下,每个数字都是 10^5(5位数),所以总体复杂度是合理的。

代码实现

class Solution {
public:
    vector<int> separateDigits(vector<int>& nums) {
        vector<int> result;
        for (int num : nums) {
            string str = to_string(num);
            for (char c : str) {
                result.push_back(c - '0');
            }
        }
        return result;
    }
};
class Solution:
    def separateDigits(self, nums: List[int]) -> List[int]:
        result = []
        for num in nums:
            for digit in str(num):
                result.append(int(digit))
        return result
public class Solution {
    public int[] SeparateDigits(int[] nums) {
        List<int> result = new List<int>();
        foreach (int num in nums) {
            string str = num.ToString();
            foreach (char c in str) {
                result.Add(c - '0');
            }
        }
        return result.ToArray();
    }
}
var separateDigits = function(nums) {
    const result = [];
    for (const num of nums) {
        const str = num.toString();
        for (const digit of str) {
            result.push(parseInt(digit));
        }
    }
    return result;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(n × d)n 是数组长度,d 是平均每个数字的位数
空间复杂度O(n × d)存储结果数组所需的空间

相关题目