刷题笔记:力扣第66题-加一 📅 发布时间:2026/7/11 19:18:10 👁️ 浏览次数: 1.拿到题目的初步想法是将数组中的数取出来还原成完整的整数sum然后将这个整数1判断是否进位然后再逆序将sum的值放入自己开辟空间的整形数组里面。初步的代码如下1. /** 2. * Note: The returned array must be malloced, assume caller calls free(). 3. */ 4. int* plusOne(int* digits, int digitsSize, int* returnSize) { 5. int i; 6. int sum 0; 7. for (i 0; i digitsSize; i){ 8. sum digits[i] * pow(10, digitsSize - i - 1); 9. } 10. sum; 11. if ((sum / pow(10, digitsSize)) 1){ 12. *returnSize digitsSize 1; 13. } else { 14. *returnSize digitsSize; 15. } 16. int* returnArray (int*)malloc(*returnSize * sizeof(int)); 17. for (i *returnSize - 1; i 0; i--){ 18. returnArray[i] sum % 10; 19. sum / 10; 20. } 21. return returnArray; 22. }2.程序在运行测试案例中没问题但是提交后报错了如下图可以看到数组里面出现了本不可能出现的负数说明溢出了测试用例中给出的数已经超出了int的范围即使换成long也会在后续测试中溢出而且数组长度上限为100扩大整数大小范围不是正确的做法。3.咨询了ai由于溢出的问题最初的想法是不可行的正确的做法应该是直接在数组中模拟进位如果出现进位导致数组长度1则特殊讨论。代码如下1. /** 2. * Note: The returned array must be malloced, assume caller calls free(). 3. */ 4. int* plusOne(int* digits, int digitsSize, int* returnSize) { 5. int i, j; 6. 7. // 1. 从最后一位个位向前遍历处理加1和进位 8. for (i digitsSize - 1; i 0; i--){ 9. // 2. 当前位加1核心操作 10. digits[i] 1; 11. 12. // 3. 关键判断当前位加1后无进位10 13. if (digits[i] 10){ 14. // 3.1 设置返回数组长度为原长度 15. *returnSize digitsSize; 16. // 3.2 分配返回数组内存题目要求malloc 17. int* returnArray (int*)malloc(*returnSize * sizeof(int)); 18. // 3.3 复制原数组加1后无进位的结果到返回数组 19. for (j 0; j *returnSize; j){ 20. returnArray[j] digits[j]; 21. } 22. // 3.4 直接返回无需处理后续位 23. return returnArray; 24. } 25. 26. // 4. 有进位当前位重置为0继续处理前一位 27. digits[i] 0; 28. } 29. 30. // 5. 执行到这里说明所有位都进位了如999→1000 31. // 5.1 设置返回数组长度为原长度1 32. *returnSize digitsSize 1; 33. // 5.2 分配新长度的内存 34. int* returnArray (int*)malloc(*returnSize * sizeof(int)); 35. // 5.3 初始化新数组最高位为1其余位为0 36. for (i 0; i *returnSize; i){ 37. if (i 0){ 38. returnArray[i] 1; // 新增的最高位 39. } else { 40. returnArray[i] 0; // 原数组所有位都进位为0 41. } 42. } 43. // 5.4 返回扩容后的数组 44. return returnArray; 45. }4.由于本题只是1所以如果发生进位只可能是当前位1且不会超过10。所以在第一个for循环里面不断进行当前位是否小于10的判断如果小于10就说明后面也不会出现进位了且不是999这种所有位均为9的特殊情况这时可确定返回数组的长度和输入数组的长度相同在内部嵌套一个for循环将每一位复制过去即可执行完内部for之后可以将返回数组直接return出去。如果是特殊情况则额外写一段代码返回数组长度定义为输入数组长度1将第一位定义为1其余位定义为0即可。5.以下是力扣官方给出的答案代码1. /** 2. * Note: The returned array must be malloced, assume caller calls free(). 3. */ 4. int* plusOne(int* digits, int digitsSize, int* returnSize) { 5. // 1. 核心遍历处理末尾连续的9进位给第一个非9位加1 6. for(int idigitsSize-1;i0;i--){ 7. // 1.1 如果当前位是9加1后会进位直接置0 8. if(digits[i]9) 9. digits[i]0; 10. else{ 11. // 1.2 非9位加1完成加1操作break终止遍历无需处理前面的位 12. digits[i]; 13. break; 14. } 15. } 16. 17. // 2. 定义返回数组指针初始为NULL 18. int *resultNULL; 19. 20. // 3. 判断是否需要扩容最高位为0 → 所有位都是9如999→000 21. if(digits[0]0){ 22. // 3.1 扩容后的长度原长度1 23. *returnSizedigitsSize1; 24. // 3.2 分配扩容后的内存 25. resultmalloc(sizeof(int)*(digitsSize1)); 26. // 3.3 最高位设1进位新增的位 27. result[0]1; 28. // 3.4 复制原数组已置0的位到新数组的后续位置 29. for(int i1;idigitsSize1;i) 30. result[i]digits[i-1]; 31. } 32. else{ 33. // 4. 无需扩容返回长度为原长度 34. *returnSizedigitsSize; 35. // 4.1 分配原长度的内存 36. resultmalloc(sizeof(int)*digitsSize); 37. // 4.2 复制加1后的数组到返回数组 38. for(int i0;idigitsSize;i) 39. result[i]digits[i]; 40. } 41. 42. // 5. 返回malloc的数组符合题目要求 43. return result; 44. }有两点思想可以学习①因为出现连续进位只可能是连续999的情况所以直接遍历数组末尾看有多少个9直接替换为0到非9位停止该位1终止遍历否则就全部替换为0。②判断第一位是否为0不为0就不是特殊情况数组长度不变复制原数组即可如果为0则为特殊情况第一位置1后面都置0即可。
刷题笔记:力扣第35题-搜索插入位置 1.这道题的解法并不难找到,难的是要求时间复杂度为O(logn)。对于这个要求,因为题目给定的数组为无重复元素的升序数组,第一时间想到的是使用二分法,通过不断夹逼找到target所对应的索引index。最开始的思路是不断的将index进行二分… 2026/7/10 1:54:14
精读《生命 3.0》:人工智能时代,人类该如何掌控未来? 精读《生命 3.0》:人工智能时代,人类该如何掌控未来?前言:为什么这是我们时代最重要的一本书?如果你曾好奇 "人工智能会取代人类吗?"" 未来的生命形态会是什么样?""我… 2026/5/17 12:18:27
电脑C盘清理指南 一、系统自带工具 Windows系统自带两款实用的清理工具,无需安装任何软件,操作简单,适合所有用户,优先推荐新手使用,安全无风险。 1. 磁盘清理(常规、手动) 打开“此电脑”,找到C盘… 2026/7/10 4:15:22
可灵Kling:AI绘图如何实现情感表达与动态细节生成 上周,我偶然在一个设计群里看到有人发了几张图——夕阳下的情侣剪影、猫咪打哈欠的瞬间、水墨风格的山水画。起初以为是哪个摄影师的佳作,结果群友说:“这是 AI 画的,叫可灵 Kling。” 更让我意外的是,这些图片不只是“… 2026/7/11 22:48:55
RocketMQ 消费模式实战:从广播模式切换到集群模式的3步迁移方案 RocketMQ消费模式迁移实战:从广播到集群的平滑过渡方案当业务规模从初创阶段快速扩张时,最初设计的广播消费模式往往会遇到性能瓶颈。我曾亲历一个电商系统在促销期间,由于广播模式导致的消息风暴,整个消息集群几乎瘫痪。本文将分… 2026/7/11 22:48:55
深度实战指南:如何为群晖NAS配置Realtek USB网卡驱动程序实现高速网络升级 深度实战指南:如何为群晖NAS配置Realtek USB网卡驱动程序实现高速网络升级 【免费下载链接】r8152 Synology DSM driver for Realtek RTL8152/RTL8153/RTL8156 based adapters 项目地址: https://gitcode.com/gh_mirrors/r8/r8152 在当今数据密集型应用日益普… 2026/7/11 22:46:54
奢侈品稀缺度定价算法,根据限量数量计算单品合理溢价区间平衡销量与档次。 奢侈品稀缺度定价算法:基于限量数量的最优溢价区间求解 一、实际应用场景描述 在时尚产业的奢侈品管理(Luxury Management) 与 限量营销(Limited Edition Marketing) 实践中,稀缺性(Scarcity&am… 2026/7/11 22:42:54
告别一字不差的老旧缓存,语义缓存如何让大模型应用省钱又提速 开篇:做AI服务的人,谁没被重复提问榨干过成本 做过大模型线上服务的开发者基本都有统一的痛点,同一个业务问题,用户能换几十种话术抛过来。做智能客服时,用户会问法国首都是什么,也会说麻烦告诉我法国的首… 2026/7/11 22:40:53
6V/1.5A高精度低噪声升压恒流PWM调光LED背光驱动器 概述:PC3303是一款用于LED背光应用的白色LED驱动器。内置升压转换器,可将输出电压提升至33V,以驱动多达9个串联的LED。高效升压转换器工作频率为1MHz,可使用小尺寸电感和陶瓷电容。白色LED的电流是通过连接在FB引脚上的电阻来编程… 2026/7/11 22:40:53
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/11 14:53:30
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/11 15:29:59