LeetCode-Palindrome Number
来源:互联网 发布:亚瑟士淘宝假货多吗 编辑:程序博客网 时间:2024/05/17 01:35
题目
Determine whether an integer is a palindrome. Do this without extra space.
这种回文类型的题目以前都是做过的,比如字符串是否回文,一般的算法如下:
public boolean isPalindrome(String x) { char[] chars = x.toCharArray(); for (int i = 0, j = chars.length -1; i < j; i++, j--) { if (chars[i] != chars[j]) { return false; } } return true; }定义两个指针i和j,一个指向前端,往后移;一个指向末端,往前移。终止条件就是两个即将重叠,或者中间有一个数字。
在看本题,加了严格的要求。不能使用额外的空间,所以第一反应将其转化为字符数组的方案就被堵死了。另外一个思路就是讲数字倒序,比较两个数字是否相等。将整型倒序的代码如下:
public int reverse(int x) {long result = 0;while (x != 0) {result = result * 10 + x % 10;x /= 10;}return result > Integer.MAX_VALUE || result < Integer.MIN_VALUE ? -1 : (int)result;}为了防止倒序之后整型逸出,上面做了一些处理,比如使用long值,逸出时返回-1。所以根据上述方法,本题可以这样解题:
public boolean isPalindrome(int x) { if (x < 0) return false; int reverse = reverse(x); if (reverse < 0) { return false; } return x == reverse; }此方法肯定可以,但是是不是够简洁,可以优化的。可以先看字符串那个示例,当然他也可以采取把字符串倒序之后比较,但是明显上面那两个指针的方法更简洁高效。同理,这个可以不以值倒序一部分呢?
public boolean isPalindrome(int x) { if (x < 0 || x != 0 && x % 10 == 0) return false; int y = 0; while (y < x) { y = y*10 + (x%10); x /= 10; } return (x == y || y / 10 == x ? true : false); }
代码精炼了不少,并且也不会出现逸出的现象
0 0
- LeetCode: Palindrome Number
- LeetCode Palindrome Number
- [Leetcode] Palindrome Number
- LeetCode: Palindrome Number
- [LeetCode] Palindrome Number
- leetcode 117: Palindrome Number
- Leetcode : Palindrome Number
- 【leetcode】Palindrome Number
- [LeetCode]Palindrome Number
- LeetCode 9 - Palindrome Number
- LeetCode-Palindrome Number
- [leetcode] Palindrome Number
- LeetCode - Palindrome Number
- LeetCode | Palindrome Number
- Leetcode: Palindrome Number
- LeetCode: Palindrome Number
- 【leetcode】Palindrome Number
- Leetcode Palindrome Number
- linux查看硬件设备信息
- Stanford机器学习课程笔记——SVM
- 【SzNOI语法百题】【d026】从 n 个数中挑选出最大的数(改)
- Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
- 多线程、多进程写同一日志情况下的日志库中 I/O 的选型
- LeetCode-Palindrome Number
- 【SzNOI语法百题】【d027】水仙花数
- DWR的使用以及DWR中工具JS文件的使用
- ViewPager 和 SlidingPaneLayout 冲突解决办法
- android studio 迁移 eclipse 和 Intellij Idea 项目的注意事项
- Subversion error: Repository moved permanently to please relocate 解决方法
- Linux Shell 基本语法
- Redis常用命令
- 【SzNOI语法百题】【d028】#号倒三角形