关于LeetCode中Palindrome Number一题的理解
来源:互联网 发布:matlab 两个矩阵拼接 编辑:程序博客网 时间:2024/06/07 00:52
题目如下:
Determine whether an integer is a palindrome. Do this without extra space.
判断一个数是否为“回文数”,禁止使用额外的存储空间。
按例奉上自己的Low B思路及已Accepted的代码。我第一眼看到这个题目的时候想法很简单,先查看给定数的最高位和最低位的数值是否相等,然后查看次高位和次低位的数值是否相等,以此类推,若高位和低位每次的值都相等,那么这个数就是“回文数”。那么下面的问题就是如何方便地判断高位和低位的值是否相等,很一般的思路就是先将这个Int类型的给定数转化成字符串,然后再使用chatAt()函数获取“高位”和“低位”的数字,之后就可以通过“==”判断这两个“数字”(其实在字符串中就是两个char类型的字符,char属于基本类型,可以通过"=="来比较是否相同)是否相同。大致思路就是这样,实现代码如下:
<span style="font-size:14px;">public boolean isPalindrome(int x) { if(x<0){ return false; } String mid = x + ""; int strLength = mid.length(); for (int i=0;i<strLength/2;i++){ if(mid.charAt(i) == mid.charAt(strLength-1-i)){ continue; }else{ return false; } } return true; }</span>然后是每次博客的重头戏,分析一个在评论区叼叼的思路。如果一个数是“回文数”的话,那将这个数从中间“劈”开,两边的数字应该是互为镜像的,那我们只要证明这一点就可以说明这个数是“回文数”了。但是“镜像”又不是那么容易进行比较,所以我们需要通过一些方法把其中的一侧“镜像”正过来,然后比较和另一侧“镜像”比较是否相等,如果相等,说明之前是互为“镜像”的,否则则说明不是互为“镜像”的。说起来比较容易,但是实现起来还是不容易想到的,下面直接看一下代码实现:
<span style="font-size:14px;">public boolean isPalindrome(int x) { if (x<0 || (x!=0 && x%10==0)) return false; int rev = 0; while (x>rev){ rev = rev*10 + x%10; x = x/10; } return (x==rev || x==rev/10);}</span>咱们举个例子:
假设输入的x为12321
rev最开始为0
x=12321>rev=0 进入第1次循环:
rev=0*10 + 12321%10 = 0 + 1 = 1
x = 12321/10 = 1232
x=1232>rev=1 进入第二次循环:
rev=1*10 + 1232%10 = 10 + 2 = 12
x = 1232/10 = 123
x=123>rev=12 进入第三次循环:
rev=12*10 + 123%10 = 120 + 3 = 123
x = 123/10 = 12
x=12<rev=123 循环结束
return true (x=12 等于rev/10=12)
若初始x=1221,则最后结果是利用x=rev=12返回的true值。
程序中巧妙地利用rev来反应“镜像”这种情况,而两种不同的判断方式则对应了输入值位数为奇数和偶数的情况(奇数的情况循环最后相当于右侧“镜像”比左侧“镜像”多出一位来,所以要进行除10操作来判断剩下的结果和左侧“镜像”是不是相等的)
- 关于LeetCode中Palindrome Number一题的理解
- 关于LeetCode中Valid Palindrome一题的理解
- 关于LeetCode中Palindrome Linked List一题的理解
- 关于LeetCode中Excel Sheet Column Number一题的理解
- 关于LeetCode中Guess Number Higher or Lower一题的理解
- 关于Leetcode中sum of integers一题的理解
- 关于Leetcode中Same Tree一题的理解
- 关于LeetCode中Power of Two一题的理解
- 关于LeetCode中Reverse String一题的理解
- 关于LeetCode中Valid Anagram一题的理解
- 关于LeetCode中Invert Binary Tree一题的理解
- 关于LeetCode中Reverse Integer一题的理解
- 关于LeetCode中Ransom Note一题的理解
- 关于LeetCode中Find the Difference一题的理解
- 关于LeetCode中Remove Element一题的理解
- 关于LeetCode中Symmetric Tree一题的理解
- 关于LeetCode中Longest Common Prefix一题的理解
- 关于LeetCode中Rectangle Area一题的理解
- ThinkPHP在IIS下配置ISAPI伪静态去掉index.php
- c++不可以返回数组
- python中urllib的高级用法
- DNS解析
- Cpp_Primer--异常检测入门
- 关于LeetCode中Palindrome Number一题的理解
- LIGHT OJ 1122 - Digit Count【DP数塔】
- 一份C#的HOOK类
- java web:At least one JAR was scanned for TLDs yet contained no TLDs.
- 显示技术介绍(1)_概述
- stringByAddingPercentEncodingWithAllowedCharacters和CFURLCreateStringByAddingPercentEscapes的使用
- arr索引和值互换
- Spring MVC中常用注解之@SessionAttributes @ModelAttribute详解
- LeetCode--No.190--Reverse Bits