给你一个正整数数组 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
方法一:模拟
将数组中的每个数字进行数位分割,然后将分割后的数字依次放入答案数组中。
时间复杂度 nums
的长度,而 nums
中的最大值。
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
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;
}
}
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;
}
};
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
}
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;
}
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
}
}
/**
* 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;
}