Leetcode 145 回文数 | 加一

1 题目

9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

示例 1:

复制代码
输入:x = 121
输出:true

示例 2:

复制代码
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

复制代码
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

提示:

  • -231 <= x <= 231 - 1

**进阶:**你能不将整数转为字符串来解决这个问题吗?

2 代码实现

c++

cpp 复制代码
class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0 ){
            return false ;
        }

        std::string s = std::to_string(x);

        int left = 0 ;
        int right = s.size() - 1 ;

        while (left < right ){
            if (s[left] == s[right]){
                left++;
                right--;
            }else{
                return false;
            }
        } 
        return true;
    }
};

js

javascript 复制代码
/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  if (x < 0 ){
    return false ;
  }  

  let s = x.toString();
  let left = 0 ;
  let right = s.length - 1 ;

  while (left < right ){
    if (s[left] == s[right]){
        left ++ ;
        right -- ;
    }else{
        return false ;
    }
  }
  return true;
};

思考

首先要进行符号的判断,负数肯定不是回文数。

为什么不转成字符串就好了啊,双指针。

左右指针一直到相遇对应的值都是相同的。

就直接这样双指针就好了。

3 题目

66. 加一

给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0

将大整数加 1,并返回结果的数字数组。

示例 1:

复制代码
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
加 1 后得到 123 + 1 = 124。
因此,结果应该是 [1,2,4]。

示例 2:

复制代码
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
加 1 后得到 4321 + 1 = 4322。
因此,结果应该是 [4,3,2,2]。

示例 3:

复制代码
输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits 不包含任何前导 0

4 代码实现

c++

cpp 复制代码
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        for (int i = digits.size() - 1 ; i>= 0 ; i--){
            digits[i] += 1 ;

            if (digits[i] < 10 ){
                return digits ;
            }

            digits[i] = 0 ;
        }
        digits.insert(digits.begin() , 1 );
        return digits ;
    }
};

js

javascript 复制代码
/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    for (let i = digits.length - 1 ; i >= 0 ; i--){
        digits[i] += 1 ;

        if (digits[i] < 10){
            return digits;
        }

        digits[i] = 0 ;
    } 
    digits = [1,...digits];
    return digits;
};

思考

真的有必要先转成数字吗?还是怎么搞?这就是数学问题吗。。。我不知道啊。。

题解

cpp 复制代码
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        // 从最后一位开始倒序遍历
        for (int i = digits.size() - 1; i >= 0; --i) {
            digits[i] += 1;  // 当前位加1
            
            // 没有进位,直接返回结果
            if (digits[i] < 10) {
                return digits;
            }
            
            // 有进位,当前位置0,继续遍历前一位
            digits[i] = 0;
        }
        
        // 所有位都是9,遍历完仍有进位,头部插入1
        digits.insert(digits.begin(), 1);
        return digits;
    }
};

代码核心解析

  1. 遍历方式 :从数组最后一位(最低位)开始,模拟手工加法
  2. 进位处理
    • 加 1 后 < 10:无进位,直接返回数组,结束计算
    • 加 1 后 = 10:当前位置 0,继续向前处理进位
  3. 全 9 特殊情况 (如 [9,9]):遍历结束后数组全为 0,在数组开头插入 1 ,得到 [1,0,0]

关键知识点

  • vector<int>& digits:引用传参,原地修改数组,节省空间
  • digits.insert(digits.begin(), 1):在数组头部插入元素 1,对应全 9 进位的场景
  • 时间复杂度:O(n)(最多遍历一次数组)
  • 空间复杂度:O(1)(除结果外无额外空间开销)

测试用例验证

bash 复制代码
输入:[1,2,3]   输出:[1,2,4]
输入:[4,3,2,1] 输出:[4,3,2,2]
输入:[9]       输出:[1,0]
输入:[9,9,9]   输出:[1,0,0,0]

我个人感觉没啥问题,就是数学,纯模拟进位,就只是思路 -> 代码的区别。

5 小结

没啥问题,打个卡,这一块就是数学的问题,接下来算法的大头还是dp,图,算法思想涉及到的这些要花时间啃,别的比较不重要的lc150不用全部做完。

相关推荐
典典分享指南7 分钟前
VS Code Git 工作树:解锁多分支并行开发新体验
算法·决策树·逻辑回归·启发式算法
_Narcissus_38 分钟前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
天疆说44 分钟前
策略的进化:从随心所欲到稳健前行
算法
冻柠檬飞冰走茶1 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx1 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
happyprince2 小时前
03-深刻观-CodeX哲学与升华(源码)
算法·ai编程
不会打球的王子2 小时前
Day 27:迁移学习与微调 — 站在巨人的肩膀上
算法
数模竞赛Paid answer3 小时前
2025年中青杯数学建模A题康养城市建设求解全过程论文及程序
算法·数学建模·数据分析·中青杯
网安蟹佬霸3 小时前
密码学安全实战:从加密原理到哈希破解的完整攻防指南
网络·算法·安全·web安全·开源·密码学·哈希算法
yangmu32033 小时前
深度解析:短视频是如何通过“算法+神经机制”劫持用户时间的?
算法