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. 总结

  • 核心思路是数字数位提取 + 顺序恢复,两种主流实现方式(数字取模/字符串转换)均能高效完成任务;
  • 关键技巧:数字取模法需通过整体反转恢复数位顺序,字符串转换法可直接按字符顺序读取,更直观;
  • 本题为基础数组处理问题,重点考察数位提取和列表操作能力。
相关推荐
ZPC82101 小时前
规划后的轨迹,如何发给 moveit_servo 执行
c++·人工智能·算法·3d
70asunflower1 小时前
5.4 分布分析
人工智能·算法·机器学习·数据挖掘·数据分析
九思十安1 小时前
HNU2026-计算机系统-笔记 5 汇编进阶
汇编·笔记
Pkmer2 小时前
滑动窗口专题
算法
Omics Pro2 小时前
柳叶刀|参考文献不存在
人工智能·算法·机器学习·支持向量机·自然语言处理
初心未改HD2 小时前
机器学习之K-Means聚类算法详解
算法·机器学习·kmeans
yugi9878382 小时前
主动噪声控制中的 FXLMS 算法研究与 MATLAB 实现
开发语言·算法·matlab
Liangwei Lin2 小时前
LeetCode 394. 字符串解码
数据结构·算法
奋斗的小乌龟2 小时前
langchain4j笔记-05
笔记