LeetCode09
自己写的解,转化为字符串再反转,比较笨。
import java.util.Scanner;
public class Result01 {public static void main(String[] args) {System.out.println("请输入整数,我来帮您判断是否是回文数。");Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();ifNumber(num);}public static boolean ifNumber(int a){//负数不可能是回文数if (a<0){System.out.println(a+"不是回文数。");return false;}else if (a==0||a<10){//0,1,2,..个位数都是回文数System.out.println(a+"是回文数。");return true;}else {//将int转化为字符串String str = Integer.toString(a);//使用StringBuffer容器的append()添加方法、reverse()反转方法StringBuffer stringBuffer = new StringBuffer();stringBuffer.append(str);//String.valueOf将StringBuffer转化为String 存入 反转后的字符串 reverseStr 中String reverseStr = String.valueOf(stringBuffer.reverse());if (str.equals(reverseStr)){System.out.println(a+"是回文数。");return true;}else {System.out.println(a+"不是是回文数。");return false;}}}
}
官方给的解比较巧妙。
public class Result02 {public static void main(String[] args) {System.out.println("请输入您要判断的数据:");Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();boolean ifNum = ifNumber(a);if (ifNum==true){System.out.println(a+"是回文数。");}else {System.out.println(a+"不是回文数");}}public static boolean ifNumber(int a){//负数不可能是回文数; 除了0以外,其余个位为0的数也都不是回文数,因为首位不可能是0。if (a<0||(a%10==0&&a!=0)){return false;}//循环建立反转一半的数字int revertedNumber = 0;while(a > revertedNumber){revertedNumber = revertedNumber * 10 +a % 10;a /= 10;}//针对奇数位和偶数位的数字,分别判断是否为回文。return a == revertedNumber || a == revertedNumber/10;}
}
//算法复杂度——————时间O(log10(N))、空间O(1)