LeetCode 每日一题笔记 日期:2026.05.11 题目:2553. 分割数组中数字的数位

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.11
  • 题目:2553. 分割数组中数字的数位
  • 难度:简单
  • 标签:数组、字符串、模拟

1. 题目理解

问题描述

给定一个正整数数组 nums,要求将每个整数按其原始数位顺序分割后,依次存入结果数组 answer 中,保持原数组的处理顺序。

示例

输入: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,按顺序拼接得到结果。

2. 解题思路

核心观察

  • 每个数字的数位顺序需要保留,可通过数字取模+整除逆序取出数位,再整体反转列表恢复顺序;
  • 也可通过字符串转换直接按字符顺序读取,更直观。

算法步骤

  1. 遍历数组中的每个数字;
  2. 逆序取出每个数字的所有数位(num % 10 取末位,num /= 10 移除末位),存入列表;
  3. 对列表整体反转,恢复数位的原始顺序;
  4. 将列表转换为 int[] 并返回。

3. 代码实现

java 复制代码
package lc2553;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] separateDigits(int[] nums) {
        List<Integer> list = new ArrayList<>();
        for (int i = nums.length - 1; i >= 0; i--) {
            int num = nums[i];
            while (true) {
                list.add(num % 10);
                if ((num /= 10) == 0) break;
            }
        }
        Collections.reverse(list);
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

4. 代码优化说明

优化点1:字符串转换版(更简洁)

java 复制代码
public int[] separateDigits(int[] nums) {
    List<Integer> list = new ArrayList<>();
    for (int num : nums) {
        for (char c : String.valueOf(num).toCharArray()) {
            list.add(c - '0');
        }
    }
    return list.stream().mapToInt(Integer::intValue).toArray();
}

优化点2:直接用数组计数(避免反转)

java 复制代码
public int[] separateDigits(int[] nums) {
    int count = 0;
    for (int num : nums) {
        count += String.valueOf(num).length();
    }
    int[] res = new int[count];
    int idx = 0;
    for (int num : nums) {
        String s = String.valueOf(num);
        for (char c : s.toCharArray()) {
            res[idx++] = c - '0';
        }
    }
    return res;
}

5. 复杂度分析

  • 时间复杂度 :O(N×D)O(N \times D)O(N×D),其中 NNN 为数组长度,DDD 为数字的平均位数(最多10位,可视为常数)。
  • 空间复杂度 :O(N×D)O(N \times D)O(N×D),存储结果列表的空间开销。

6. 总结

  • 核心思路是数字数位提取 + 顺序恢复,两种主流实现方式(数字取模/字符串转换)均能高效完成任务;
  • 关键技巧:数字取模法需通过整体反转恢复数位顺序,字符串转换法可直接按字符顺序读取,更直观;
  • 本题为基础数组处理问题,重点考察数位提取和列表操作能力。
相关推荐
亦皓ai几秒前
AI时代后端工程(二):AI把代码写得越来越快,我却越来越不敢让它直接开工了
人工智能·算法·机器学习·搜索引擎·transformer
噜~噜~噜~3 分钟前
操作系统笔记-2.3.2.1 进程互斥的软件实现方法
笔记·操作系统
云贝教育-郑老师34 分钟前
【麒麟服务器系统交付:一个DBA的六年信创实战笔记】
服务器·笔记·dba
玖玥拾1 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
重生之后端学习3 小时前
239. 滑动窗口最大值[困难]✅
java·数据结构·算法·leetcode·职场和发展
fpcc3 小时前
算法和数据结构—动态规划法
数据结构·算法·动态规划
陈年老古董5 小时前
OpenCV图像处理笔记:图像拼接、答题卡识别与目标提取
人工智能·笔记·python·opencv·计算机视觉
陈年老古董5 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11