📚 小白学算法 | 每日一题 | 算法实战:加1!

🔍 题目描述

该题目来自于力扣66题加一

💡 解题思路拆解

1. 模拟手工加法(简单粗暴)

想象小学数学加法:从最低位开始加1,处理进位,直到最高位。

  • 核心矛盾 :当某一位是9时,加1会变为0并向前进位(如999 → 1000

🎯 代码实现(Go)

css 复制代码
func plusOne(digits []int) []int {
    digits[len(digits) - 1]++
    digits = append([]int{0},digits...)

    for i:=len(digits)-1;i>0;i--{
        if digits[i] < 10{
            break
        }
        digits[i] = 0
        digits[i-1]++
    }
    if digits[0] == 0 {
        digits = digits[1:]
    }
    return digits
}

2. 巧用逆向遍历

从数组末位向首位扫描,只需要找到末尾连续出现的9,全部置零,末尾开始的第一个不为 9 的元素 加1即可

分三种情况处理:

  1. 非9数字 :直接加1,结束计算(如123 → 124
  2. 是9但非全9 :置0,继续处理前一位(如899 → 900
  3. 全为9 :数组长度+1,首位置1(如999 → 1000

🎯 代码实现(Go)

css 复制代码
for i := len(digits); i > 0; i-- {
		if digits[i-1] == 9 {
			digits[i-1] = 0
			if i == 1 && digits[i-1] == 0 {
				digits = append([]int{1}, digits...)
			}
		} else {
			digits[i-1]++
			break
		}
	}
	return digits

复杂度分析

  • 时间复杂度:O(n) ,最多遍历一次数组
  • 空间复杂度:O(1) ,原地修改(全9情况需O(n)额外空间)

互动话题:你在处理进位问题时踩过哪些坑?欢迎评论区分享!💬

🚀 坚持每日一题,小白也能稳步上升!

相关推荐
AI科技星25 分钟前
从ZUFT光速螺旋运动求导推出自然常数e
服务器·人工智能·线性代数·算法·矩阵
老鼠只爱大米28 分钟前
LeetCode经典算法面试题 #78:子集(回溯法、迭代法、动态规划等多种实现方案详细解析)
算法·leetcode·动态规划·回溯·位运算·子集
执着25932 分钟前
力扣hot100 - 199、二叉树的右视图
数据结构·算法·leetcode
I_LPL36 分钟前
day21 代码随想录算法训练营 二叉树专题8
算法·二叉树·递归
可编程芯片开发43 分钟前
基于PSO粒子群优化PI控制器的无刷直流电机最优控制系统simulink建模与仿真
人工智能·算法·simulink·pso·pi控制器·pso-pi
cpp_250143 分钟前
P8448 [LSOT-1] 暴龙的土豆
数据结构·c++·算法·题解·洛谷
lcj251144 分钟前
深入理解指针(4):qsort 函数 & 通过冒泡排序实现
c语言·数据结构·算法
fie88891 小时前
基于MATLAB的转子动力学建模与仿真实现(含碰摩、不平衡激励)
开发语言·算法·matlab
唐梓航-求职中1 小时前
编程大师-技术-算法-leetcode-1472. 设计浏览器历史记录
算法·leetcode
_OP_CHEN1 小时前
【算法基础篇】(五十八)线性代数之高斯消元法从原理到实战:手撕模板 + 洛谷真题全解
线性代数·算法·蓝桥杯·c/c++·线性方程组·acm/icpc·高斯消元法