Description#
Given an array of positive integers nums
, return an array answer
that consists of the digits of each integer in nums
after separating them in the same order they appear in nums
.
To separate the digits of an integer is to get all the digits it has in the same order.
- For example, for the integer
10921
, the separation of its digits is [1,0,9,2,1]
.
Example 1:
Input: nums = [13,25,83,77]
Output: [1,3,2,5,8,3,7,7]
Explanation:
- The separation of 13 is [1,3].
- The separation of 25 is [2,5].
- The separation of 83 is [8,3].
- The separation of 77 is [7,7].
answer = [1,3,2,5,8,3,7,7]. Note that answer contains the separations in the same order.
Example 2:
Input: nums = [7,1,3,9]
Output: [7,1,3,9]
Explanation: The separation of each integer in nums is itself.
answer = [7,1,3,9].
Constraints:
1 <= nums.length <= 1000
1 <= nums[i] <= 105
Solutions#
Solution 1: Simulation#
Split each number in the array into digits, then put the split numbers into the answer array in order.
The time complexity is $O(n \times \log_{10} M)$, and the space complexity is $O(n \times \log_{10} M)$. Where $n$ is the length of the array $nums$, and $M$ is the maximum value in the array $nums$.
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:
t = []
while x:
t.append(x % 10)
x //= 10
ans.extend(t[::-1])
return ans
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| class Solution {
public int[] separateDigits(int[] nums) {
List<Integer> res = new ArrayList<>();
for (int x : nums) {
List<Integer> t = new ArrayList<>();
for (; x > 0; x /= 10) {
t.add(x % 10);
}
Collections.reverse(t);
res.addAll(t);
}
int[] ans = new int[res.size()];
for (int i = 0; i < ans.length; ++i) {
ans[i] = res.get(i);
}
return ans;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Solution {
public:
vector<int> separateDigits(vector<int>& nums) {
vector<int> ans;
for (int x : nums) {
vector<int> t;
for (; x; x /= 10) {
t.push_back(x % 10);
}
while (t.size()) {
ans.push_back(t.back());
t.pop_back();
}
}
return ans;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| func separateDigits(nums []int) (ans []int) {
for _, x := range nums {
t := []int{}
for ; x > 0; x /= 10 {
t = append(t, x%10)
}
for i, j := 0, len(t)-1; i < j; i, j = i+1, j-1 {
t[i], t[j] = t[j], t[i]
}
ans = append(ans, t...)
}
return
}
|
1
2
3
4
5
6
7
8
9
10
11
12
| function separateDigits(nums: number[]): number[] {
const ans: number[] = [];
for (let num of nums) {
const t: number[] = [];
while (num) {
t.push(num % 10);
num = Math.floor(num / 10);
}
ans.push(...t.reverse());
}
return ans;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| impl Solution {
pub fn separate_digits(nums: Vec<i32>) -> Vec<i32> {
let mut ans = Vec::new();
for &num in nums.iter() {
let mut num = num;
let mut t = Vec::new();
while num != 0 {
t.push(num % 10);
num /= 10;
}
t.into_iter()
.rev()
.for_each(|v| ans.push(v));
}
ans
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| /**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* separateDigits(int* nums, int numsSize, int* returnSize) {
int n = 0;
for (int i = 0; i < numsSize; i++) {
int t = nums[i];
while (t != 0) {
t /= 10;
n++;
}
}
int* ans = malloc(sizeof(int) * n);
for (int i = numsSize - 1, j = n - 1; i >= 0; i--) {
int t = nums[i];
while (t != 0) {
ans[j--] = t % 10;
t /= 10;
}
}
*returnSize = n;
return ans;
}
|
Solution 2#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| impl Solution {
pub fn separate_digits(nums: Vec<i32>) -> Vec<i32> {
let mut ans = vec![];
for n in nums {
let mut t = vec![];
let mut x = n;
while x != 0 {
t.push(x % 10);
x /= 10;
}
for i in (0..t.len()).rev() {
ans.push(t[i]);
}
}
ans
}
}
|