首页

专栏

java

文章详情

0

【每日算法/刷穿 LeetCode】9. 回文数(简单)

宫水三叶发布于 今天 15:30

题目描述

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

示例 1:

输入: 121

输出: true

示例 2:

输入: -121

输出: false

解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10

输出: false

解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

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

字符串解法

既然进阶里提到了不能用字符串来解决,那么三叶就提供一下吧。

class Solution {

public boolean isPalindrome(int x) {

String s = String.valueOf(x);

StringBuilder sb = new StringBuilder(s);

sb.reverse();

return sb.toString().equals(s);

}

}

时间复杂度:数字 n 的位数,数字大约有 log10(n) 位,翻转操作要执行循环。复杂度为 O(log10(n))

空间复杂度:使用了字符串作为存储。复杂度为 O(log10(n))

非字符串解法(完全翻转)

原数值 x 的不超过 int 的表示范围,但翻转后的值会有溢出的风险,所以这里使用 long 进行接收,最后对比两者是否相等。

class Solution {

public boolean isPalindrome(int x) {

if (x < 0) return false;

long ans = 0;

int t = x;

while (x > 0) {

ans = ans * 10 + x % 10;

x /= 10;

}

return ans - t == 0;

}

}

时间复杂度:数字 n 的位数,数字大约有 $\log{10}{n}$ 位。复杂度为 $\log{10}{n}$

空间复杂度:$O(1)$

非字符串解法(部分翻转)

如果在进阶中增加一个我们熟悉的要求:环境中只能存储得下 32 位的有符号整数。

那么我们就连 long 也不能用了,这时候要充分利用「回文」的特性:前半部分和后半部分(翻转)相等。

这里的前半部分和后半部分(翻转)需要分情况讨论:

回文长度为奇数:回文中心是一个独立的数,即 忽略回文中心后,前半部分 == 后半部分(翻转)。如 1234321 回文串

回文长度为偶数:回文中心在中间两个数中间,即 前半部分 == 后半部分(翻转)。如 123321

class Solution {

public boolean isPalindrome(int x) {

// 对于 负数 和 x0、x00、x000 格式的数,直接返回 flase

if (x < 0 || (x % 10 == 0 && x != 0)) return false;

int t = 0;

while (x > t) {

t = t * 10 + x % 10;

x /= 10;

}

// 回文长度的两种情况:直接比较 & 忽略中心点(t 的最后一位)进行比较

return x == t || x == t / 10;

}

}

时间复杂度:数字 n 的位数,数字大约有 $\log{10}{n}$ 位。复杂度为 $\log{10}{n}$

空间复杂度:$O(1)$

最后

这是我们「刷穿 LeetCode」系列文章的第 No.9 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先将所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

由于 LeetCode 的题目随着周赛 & 双周赛不断增加,为了方便我们统计进度,我们将按照系列起始时的总题数作为分母,完成的题目作为分子,进行进度计算。当前进度为 9/1916 。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:Github 地址 & Gitee 地址。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和一些其他的优选题解。

算法与数据结构

LeetCode题解

算法面试

面试java算法leetcode数据结构与算法

阅读 34发布于 今天 15:30

赞收藏

分享

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

刷穿LeetCode

公众号:「宫水三叶的刷题日记 」。每天十分钟,快乐学算法 ~

关注专栏

宫水三叶

关注公众号:「宫水三叶的刷题日记 」。

1声望

0粉丝

关注作者

0 条评论

得票时间

提交评论

宫水三叶

关注公众号:「宫水三叶的刷题日记 」。

1声望

0粉丝

关注作者

宣传栏

目录

题目描述

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

示例 1:

输入: 121

输出: true

示例 2:

输入: -121

输出: false

解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10

输出: false

解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

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

字符串解法

既然进阶里提到了不能用字符串来解决,那么三叶就提供一下吧。

class Solution {

public boolean isPalindrome(int x) {

String s = String.valueOf(x);

StringBuilder sb = new StringBuilder(s);

sb.reverse();

return sb.toString().equals(s);

}

}

时间复杂度:数字 n 的位数,数字大约有 log10(n) 位,翻转操作要执行循环。复杂度为 O(log10(n))

空间复杂度:使用了字符串作为存储。复杂度为 O(log10(n))

非字符串解法(完全翻转)

原数值 x 的不超过 int 的表示范围,但翻转后的值会有溢出的风险,所以这里使用 long 进行接收,最后对比两者是否相等。

class Solution {

public boolean isPalindrome(int x) {

if (x < 0) return false;

long ans = 0;

int t = x;

while (x > 0) {

ans = ans * 10 + x % 10;

x /= 10;

}

return ans - t == 0;

}

}

时间复杂度:数字 n 的位数,数字大约有 $\log{10}{n}$ 位。复杂度为 $\log{10}{n}$

空间复杂度:$O(1)$

非字符串解法(部分翻转)

如果在进阶中增加一个我们熟悉的要求:环境中只能存储得下 32 位的有符号整数。

那么我们就连 long 也不能用了,这时候要充分利用「回文」的特性:前半部分和后半部分(翻转)相等。

这里的前半部分和后半部分(翻转)需要分情况讨论:

回文长度为奇数:回文中心是一个独立的数,即 忽略回文中心后,前半部分 == 后半部分(翻转)。如 1234321 回文串

回文长度为偶数:回文中心在中间两个数中间,即 前半部分 == 后半部分(翻转)。如 123321

class Solution {

public boolean isPalindrome(int x) {

// 对于 负数 和 x0、x00、x000 格式的数,直接返回 flase

if (x < 0 || (x % 10 == 0 && x != 0)) return false;

int t = 0;

while (x > t) {

t = t * 10 + x % 10;

x /= 10;

}

// 回文长度的两种情况:直接比较 & 忽略中心点(t 的最后一位)进行比较

return x == t || x == t / 10;

}

}

时间复杂度:数字 n 的位数,数字大约有 $\log{10}{n}$ 位。复杂度为 $\log{10}{n}$

空间复杂度:$O(1)$

最后

这是我们「刷穿 LeetCode」系列文章的第 No.9 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先将所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

由于 LeetCode 的题目随着周赛 & 双周赛不断增加,为了方便我们统计进度,我们将按照系列起始时的总题数作为分母,完成的题目作为分子,进行进度计算。当前进度为 9/1916 。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:Github 地址 & Gitee 地址。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和一些其他的优选题解。

算法与数据结构

LeetCode题解

算法面试

java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)相关推荐

  1. 整数反转leetcode java_【Java】【每日算法/刷穿 LeetCode】7. 整数反转(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]7. 整数反转(简单) 宫水三叶发布于 今天 12:10 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数 ...

  2. java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]5. 最长回文子串(中等) 宫水三叶发布于 今天 12:00 题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 ...

  3. java编写字母z算法_【Java】【每日算法/刷穿 LeetCode】6. Z 字形变换(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]6. Z 字形变换(中等) 宫水三叶发布于 今天 12:03 题目描述 将一个给定字符串 s 根据给定的行数 numRows , ...

  4. java输出罗马数字,【Java】【刷穿 LeetCode】13. 罗马数字转整数(简单)

    首页 专栏 java 文章详情 0 [刷穿 LeetCode]13. 罗马数字转整数(简单) 宫水三叶发布于 今天 14:14 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 ...

  5. 【每日算法/刷穿 LeetCode】25. K 个一组翻转链表(困难)

    题目描述 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例: ...

  6. java计算机毕业设计基于ssm的协同过滤算法的电影推荐系统(源代码+数据库+Lw文档)

    项目介绍 "互联网+"的战略实施后,很多行业的信息化水平都有了很大的提升.但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人 ...

  7. 每日算法(四十三)-java为了更改的规划城市,需要统计楼栋数目信息。

    每日算法(四十三)-java为了更改的规划城市,需要统计楼栋数目信息. 为了更改的规划城市,需要统计楼栋数目信息. 方法如下,一张航拍照片会被分隔为N*M个小格子,每个格子可以用0跟1来表示.如果楼栋 ...

  8. 【数据结构与算法】之深入解析“回文数”的求解思路和算法示例

    一.题目要求 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.例如,121 是回文,而 123 ...

  9. java最长回文子序列_在一个字符串里面怎么找出最长回文子序列长度

    回文字符串是什么?类似于level,noon,abbba这种,就是从左读和从右读都是同一个字符串.... 先说一下我的思路: 比如现在有字符串:"12212321" 1,先在每个字 ...

最新文章

  1. 令人郁闷的 DOCTYPE
  2. java多线程封装_Java 多线程处理任务的封装
  3. MySQL性能调优 读写分离
  4. STM32的时钟配置——时钟树解析
  5. [Leedcode][JAVA][第680题][验证回文字符串Ⅱ][贪心][递归]
  6. 如何使用 Cisdem Video Converter 在Mac上将 MKV 转换为 MP4
  7. SL项目创建失败_提示安装SDK
  8. CorelDRAWX4的VBA插件开发(八)更改尺寸与移动
  9. eclipse中文版
  10. coreseek添加新词库
  11. Android pad适配札记
  12. Impala sql实现同比计算(lag函数)
  13. 栈“后进先出”和队列中“先进先出”的含义
  14. 计算机系统维护课程设计报告,计算机系统维护工程(第2版)
  15. 如何制作linux安装光盘,新手看招 如何制作Linux系统的安装光盘?
  16. POI word 内容提取 Strict OOXML isn‘t currently supported, please see bug #57699
  17. 指定decode_responses=True,连接redis存的数据是字符串格式
  18. 【旧资料整理】8086汇编 鼠标操作
  19. latex 参考文献没有显示_LaTeX 参考文献的处理
  20. 【UCIe】UCIe DLP/DLLP 介绍

热门文章

  1. Etcd 架构与实现解析
  2. 动态管理配置文件扩展接口EnvironmentPostProcessor
  3. 引用参考文献_引用参考文献时应注意些什么
  4. .exe已停止工作_【PS课堂】你的photoshop已停止工作了,文件未保存该怎么办?
  5. 五大关键物联网应用助力优化数据中心基础设施管理
  6. 建议收藏:服务器和存储技术知识
  7. android contacts电话查询头像,android怎么取得本地通讯录的头像的原图
  8. python变量无需指定类型对吗_Python变量类型 - osc_3rgq3dae的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. linux top 历史,阿里工程师眼中的linux top命令
  10. php xml 增删改查,PHP实现对xml进行简单的增删改查(CRUD)操作示例