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

Raphael Liu Lv10

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

模拟,枚举每个数的数位。

附:视频讲解

一行写法

[sol1-Python3]
1
2
3
class Solution:
def separateDigits(self, nums: List[int]) -> List[int]:
return [d for x in nums for d in map(int, str(x))]

O(1) 额外空间写法

从低到高枚举数位,翻转新插入的数字。

[sol1-Python3]
1
2
3
4
5
6
7
8
9
10
class Solution:
def separateDigits(self, nums: List[int]) -> List[int]:
ans = []
for x in nums:
i0 = len(ans)
while x:
ans.append(x % 10)
x //= 10
ans[i0:] = ans[i0:][::-1] # 忽略切片开销(毕竟你可以手动反转)
return ans
[sol1-Go]
1
2
3
4
5
6
7
8
9
10
11
12
13
func separateDigits(nums []int) (ans []int) {
for _, x := range nums {
i0 := len(ans)
for ; x > 0; x /= 10 {
ans = append(ans, x%10)
}
b := ans[i0:]
for i, n := 0, len(b); i < n/2; i++ {
b[i], b[n-1-i] = b[n-1-i], b[i]
}
}
return
}

复杂度分析

  • 时间复杂度:O(n\log U),其中 n 为 nums 的长度,U=max(\textit{nums})。
  • 空间复杂度:O(1)。不考虑返回值,仅用到若干额外变量。
 Comments
On this page
2553-分割数组中数字的数位