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

  • 核心思路是数字数位提取 + 顺序恢复,两种主流实现方式(数字取模/字符串转换)均能高效完成任务;
  • 关键技巧:数字取模法需通过整体反转恢复数位顺序,字符串转换法可直接按字符顺序读取,更直观;
  • 本题为基础数组处理问题,重点考察数位提取和列表操作能力。
相关推荐
飞Link2 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
zhangrelay2 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
Jimmy3 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
一去不复返的通信er4 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
Shaoshing5 小时前
LeetCode100 49. 字母异位词分组
java·算法
志尊宝5 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
YFJ_mily5 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
lll23526917795 小时前
线下多人发言对比与录音操作
笔记·智能手机
汤姆宝库6 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法