2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
【LetMeFly】2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
力扣题目链接:https://leetcode.cn/problems/separate-the-digits-in-an-array/
给你一个正整数数组 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 <= 10001 <= nums[i] <= 105
解题方法:模拟
怎样求出一个大于零的整数在十进制下的每一位?
当这个数($t$)不为零的时候,不断取出这个数的个位($t%10$),然后令这个数除以$10$并向下取整就好了。
但是这样求出的结果是低位在前高位在后的,如$12$我们按上述算法将会得到$[2, 1]$。
因此我们不如来个将错就错,先求$nums$最后一个元素,之后是倒数第二个,…,最后求$nums$第一个元素。
这样我们就得到了一个完全逆向的答案数组,将这个数组原地reverse一下就好了。
时空复杂度分析
- 时间复杂度$O(len(nums)\times \log nums[i])$
- 空间复杂度$O(1)$,力扣返回值不计入算法空间复杂度
至于Java这种不可变长度数组的编程语言,若不想使用可变数组List把空间复杂度搞到$O(n)$,也可以dry run一次(只计算需要的长度不真的放入数组),然后再申请对应长度的int[]。
AC代码
C++
1 | |
Python
1 | |
Java
1 | |
Go
1 | |
Rust
- 执行用时分布0ms击败100.00%
- 消耗内存分布2.21MB击败100.00%
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
2553.分割数组中数字的数位:模拟(maybe+翻转)——java也O(1)
https://blog.letmefly.xyz/2026/05/11/LeetCode 2553.分割数组中数字的数位/