分割数组中数字的数位

标签: 数组 模拟

难度: Easy

给你一个正整数数组 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

Submission

运行时间: 24 ms

内存: 16.3 MB

class Solution:
    def separateDigits(self, nums: List[int]) -> List[int]:
        result = []
        for num in nums:
            for j in str(num):
                result.append(int(j))
        return result

Explain

题解的核心思想是遍历整数数组 `nums`,将每个整数转换为字符串,再将字符串中的每个字符转换回整数,并逐个添加到结果数组 `result` 中。这样可以确保整数的数位按原顺序分割并添加到结果数组中。

时间复杂度: O(n)

空间复杂度: O(n)

class Solution:
    def separateDigits(self, nums: List[int]) -> List[int]:
        result = []  # 结果数组,用于存放分割后的数位
        for num in nums:  # 遍历输入的整数列表
            for j in str(num):  # 将整数转换为字符串并遍历每个字符
                result.append(int(j))  # 将字符转换回整数,并添加到结果数组
        return result  # 返回包含所有分割数位的结果数组

Explore

是的,将整数转换为字符串然后再转换回整数的过程确实会影响算法的执行效率。每次转换都涉及到内存分配和额外的运算,尤其是在处理大数据量时。更直接的方法可以是使用数学方法直接从整数中提取每一位。例如,可以通过循环使用取模操作(%10)来获取最低位,然后使用整除操作(//10)来移除这个最低位。这种方法避免了字符串转换的开销,从而可以更高效地处理数字。

是的,如果输入数组`nums`为空,此题解代码会正确处理并返回一个空数组。因为代码中的for循环将不会执行任何迭代,因此`result`数组将保持为空,最终返回的也是一个空数组。这意味着这段代码能够正确处理空输入的情况。

在处理极大的数字时,将数字转换为字符串并遍历每个字符的方法相对较不高效。字符串的创建和遍历都涉及额外的内存和时间开销。尤其是在数字非常大时,字符串操作的开销也会随之增大。使用数学方法(如前一个问题所述的取模和整除)直接操作数字通常更加高效,因为它避免了字符串处理的开销,并且可以更直接地访问数字的每一位。