LeetCode算法题:9. 回文数(Java解法)

给你一个整数 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

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

我的解题思路1:
将整数转为字符串->将字符串反转->判断反转后的字符串是否与之前字符串相同,如果相同则是回文数,否则不是回文数。
思路1代码:

class Solution {public boolean isPalindrome(int x) {String original = x+"";StringBuilder sb = new StringBuilder(original).reverse();String s = sb.toString();if (original.equals(s))return true;return false;}
}

在这里插入图片描述

思路2:
将整数转为字符串->分别定义一个下标指向字符串头和尾,以此对比头和尾所指字符是否相同,如果不同则返回false,直到头下标超过尾下标,表示是回文数,返回true
思路2代码

class Solution {public boolean isPalindrome(int x) {String s = x + "";int left = 0, right = s.length()-1;// left指向开始字符,right指向结尾字符while(left<right){if(s.charAt(left)!=s.charAt(right))return false;// 头和尾不相同,返回falseleft++;right--;}// 一直没有不相同的,返回truereturn true;}
}

结果:
在这里插入图片描述
思路三:直接利用整数运算进行操作
如果小于0,肯定不是回文数
对整数进行尾部取余然后算出反转后的数,比较是否相等,如果相等则是回文数,否则不是
代码

class Solution {public boolean isPalindrome(int x) {// 负数直接返回falseif(x<0)return false;// 使用long类型,防止反转后的数值溢出int型数据long reverse = 0;int original = x;while(x!=0){reverse = reverse*10 + x%10;x = x/10;}if(reverse==original)return true;return false;}
}

结果:
在这里插入图片描述
和上述同样的逻辑。只是在防止反转后数值溢出处理使用了判断逻辑,判断int型溢出逻辑可以查看我的第8题讲解文章,即在计算之前判断是否大于int的最大值/10,以及再计算之后的值是否小于0。
修改后代码如下,节省了4个字节的内存:

class Solution {public boolean isPalindrome(int x) {// 负数直接返回falseif(x<0)return false;// 使用long类型,防止反转后的数值溢出int型数据int reverse = 0;int original = x;while(x!=0){if(reverse > Integer.MAX_VALUE/10)return false;reverse = reverse*10 + x%10;if(reverse < 0)return false;x = x/10;}if(reverse==original)return true;return false;}
}

在这里插入图片描述

总结:
字符串反转问题:可以将String类型变量转成StringBuilder然后调用reverse()进行反转,最后使用toString()方法转回String类型。
字符串如何转成字符数组:s.toCharArray()函数。
从上述结果也可以看出,字符串处理是速度较慢的,计算机对于数值计算较快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/679732.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux(openEuler、CentOS8)企业内网samba服务器搭建(Windows与Linux文件共享方案)

本实验环境为openEuler系统<以server方式安装>&#xff08;CentOS8基本一致&#xff0c;可参考本文) 目录 知识点实验1. 安装samba2. 启动smb服务并设置开机启动3. 查看服务器监听状态4. 配置共享访问用户5. 创建共享文件夹6. 修改配置文件7. 配置防火墙8. 使用windows…

Mysql 基础 - 常见 子句

算数运算符 > < > < !/<> 逻辑运算符 3i in is null is not null 2l limit like 2o or 、order by 1a and ib between and 1n not and、or 、not、 in、 orderby、 limit、 like、 between...and、 is null 、is not null

CSRF漏洞简介

csrf简介 CSRF 全称为跨站请求伪造&#xff08; Cross-site request forgery &#xff09;&#xff0c;是一种网络攻击方式&#xff0c;在 CSRF 的攻击场景中攻击者会伪造一个请求&#xff08;这个请求一般是一个链接&#xff09;&#xff0c;然后欺骗目标用户进行点击&#xf…

三维建模技术在AI去衣中的奇妙应用

引言&#xff1a; 随着计算机视觉和深度学习技术的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;在图像处理和理解方面取得了显著进展。其中&#xff0c;一个颇具争议却技术上引人入胜的应用便是AI去衣——即使用AI技术从图片或视频中移除人物的衣物。尽管这技术常因…

【微服务】分布式事务(通过Seata解决分布式事务问题)

分布式事务 分布式事务Seata微服务集成SeataXA模式XA模式使用 AT模式AT模式实现 分布式事务 在分布式系统中&#xff0c;如果一个业务需要多个服务合作完成&#xff0c;而且每一个服务都有事务&#xff0c;多个事务必须同时成功或失败&#xff0c;这样的事务就是分布式事务&am…

软考系列必过资料分享-系统架构师-系统分析师-信息系统项目管理师

建议,写在前面 知识点是公用的,原则上不分新旧。每年会有少部分的题目切合当前时间段&#xff08;也是通过旧的知识演变的&#xff09; 信息系统项目管理师证书 系统架构师证书 系统分析师证书 资料分享 关注公众号 回复 信息系统项目管理师资料 即可获取信息系统项目管理师资…

【论文速读】|针对模糊驱动生成的提示性模糊测试

本次分享论文&#xff1a;Prompt Fuzzing for Fuzz Driver Generation 基本信息 原文作者&#xff1a;Yunlong Lyu, Yuxuan Xie, Peng Chen, Hao Chen 作者单位&#xff1a;腾讯安全大数据实验室、加州大学戴维斯分校 关键词&#xff1a;软件测试, Fuzzing, 自动化Fuzz驱动…

提高谷歌抓取成功率:代理IP的7个使用误区

在当今数字化时代&#xff0c;数据采集和网络爬取已成为许多企业和个人必不可少的业务活动。对于爬取搜索引擎数据&#xff0c;特别是Google&#xff0c;使用代理IP是常见的手段。然而&#xff0c;使用代理抓取Google并不是一件轻松的事情&#xff0c;有许多常见的误区可能会导…

OpenGL 入门(三)—— OpenGL 与 OpenCV 共同打造大眼滤镜

从本篇开始&#xff0c;会在上一篇搭建的滤镜框架的基础上&#xff0c;介绍具体的滤镜效果该如何制作。本篇会先介绍大眼滤镜&#xff0c;先来看一下效果&#xff0c;原图如下&#xff1a; 使用手机后置摄像头对眼部放大后的效果&#xff1a; 制作大眼滤镜所需的主要知识点&…

有哪些渠道找到海外代理IP服务?

在今天的全球化时代&#xff0c;许多企业和个人都需要跨越国界&#xff0c;与世界各地的资源、信息和市场进行连接。海外代理IP服务成跨境在线业务增效的重要的工具&#xff0c;可以帮助拓展业务宽度&#xff0c;以实现更多样化的业务需求。但是&#xff0c;如何找到合适、安全…

Java | Leetcode Java题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; public class Solution {public int climbStairs(int n) {double sqrt5 Math.sqrt(5);double fibn Math.pow((1 sqrt5) / 2, n 1) - Math.pow((1 - sqrt5) / 2, n 1);return (int) Math.round(fibn / sqrt5);} }

多核DSP并行计算跨平台通信解决方案

并行计算的核心是计算节点以及节点间的通信与协调机制。OpenMP虽然给开发者提供了极易上手的增量式开发方式&#xff0c;但是OpenMP在与复杂架构的MCSDK结合后&#xff0c;工具与代码产生了大量不可调试的黑盒子&#xff0c;更是决定了它不能用于关键任务领域&#xff0c;如军工…