LeetCode--palindrome-number回文数
1、問題
Determine whether an integer is a palindrome. Do this without extra space.
click to show spoilers.
Some hints:
Could negative integers be palindromes? (ie, -1)
If you are thinking of converting the integer to string, note the restriction of using extra space.
You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?
There is a more generic way of solving this problem.
2、分析
判斷一個整數是否為回文數,不要用額外的空間。
負數可以是回文數嗎?(不可以)
如果你想用整數轉為字符串,注意不可以使用額外的空間。
你也可以嘗試反轉一個整數,但是要考慮整數溢出的問題。
3、正解
class Huiwenshu {public static void main(String[] args) {boolean b1 = isPalindrome(5);boolean b2 = isPalindrome(-10);boolean b3 = isPalindrome(200);boolean b4 = isPalindrome(12321);System.out.println(b4);}static boolean isPalindrome(int x) {int res = 0;//定義反向數if(x<0 || x!=0 && x%10==0){//當x小于0,或者x是10的整數倍時,不是回文數return false;}while(x > res){//只要正向剩下的數大于反向得到的數,就繼續判斷res = res *10 + x%10;//反向得到的數x = x/10;//正向剩下的數}return(res == x)||(res/10 == x);//偶數位時兩者相等,奇數位時res/10==x} }4、第一次錯誤思路:
2332,把最低位移到最高位,移4次會得到2332,判斷改變前后是否相等。但是!所有數都可以滿足。。。
不過其中也學習到一些細節:
(1)Java中求冪:double d = Math.pow(double a,double b);
(2)強制轉換:int? i =(int)d;
//方法是錯誤的 class Palindrome {public static void main(String[] args) {boolean b = isPalindrome(123);System.out.println(b);}public static boolean isPalindrome(int x) {if(x<0){return false;}int n = 1;//獲取位數int wei = x;while(wei>10){wei = wei/10;//改變了x的值n++; }System.out.println("x="+x);int temp = x;for(int i=1;i<n;i++){temp = temp% 10 * (int)Math.pow(10,n-1) + temp/10;System.out.println("temp="+temp);}//if(x==1)// System.out.println(temp);if(temp == x)return true;elsereturn false;} }5、第二次錯誤解法(AC,但是題目說到了不要用整數轉字符串)
用棧實現整數的反轉,且不會溢出,但是不符合要求。
import java.util.Stack; //利用棧實現回文數的判斷 class Palindrome2 {public static void main(String[] args) {int x = 12121;boolean b = isPalindrome(x);System.out.println(b);}public static boolean isPalindrome(int x) {if(x<0){return false;}String in = x+"";//x轉為字符串char [] arr = in.toCharArray();//字符串轉為字符數組Stack<String> st = new Stack<String>();//創建一個String類型的棧for(int i = 0;i<arr.length;i++){st.push(arr[i]+"");//字符進棧}String out = "";//出棧序列轉為字符串while(!st.isEmpty()){out = out + st.pop();//字符出棧并連接}int res = Integer.parseInt(out);//字符串轉為整數return res == x;} }6、利用字符串的反轉功能
static boolean isPalindrome2(int x){//利用字符串的反轉if(x<0 || x!=0 && x%10==0){return false;//此時不能字符串反轉}StringBuffer sb = new StringBuffer(x+"");sb.reverse();//反轉System.out.println(sb.toString());System.out.println(x+"");return sb.toString().equals(x+"");}注意最后比較時,不能用==(比較的是地址),要用equals(內部重寫了,比較的是值)。
總結
以上是生活随笔為你收集整理的LeetCode--palindrome-number回文数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA错误:无法从静态上下文中引用非静
- 下一篇: VS2017无法启动