首页 > 试题广场 >

设计算法,把一个数字看成字符串,问它是不是一个回文数?

[问答题]
  大家对回文串不陌生吧?一个字符串从前看和从后看如果一样的话,就是回文串。比如“上海自来水来自海上”就是一个回文串。现在我们的问题来了,把一个数字看成字符串,问它是不是一个回文数?这么简单的题目对想要成为小米工程师的你来说肯定不是问题。不过提醒一下哦:时间复杂度和空间复杂度越低的算法,得分越高。
C++:
  bool isPalindromeNumber(long num)
Java:
  boolean isPalindromeNumber(long num)
示例:12321 ->  true
      3     ->  true 
      133434->  false
推荐
本题在时间复杂度和空间复杂度上有所要求,所有采用将数字转换成字符串,在空间复杂度显然有点不划算,通过计算得到数字前后对应位的数字,显然要好一些
bool isPalindromeNumber(long x) 
{  
        int a = x, h = 1;
        if (a < 0) return false;
        while (a / h >= 10) {
            h = h * 10;
        }
        while (a > 0) {
            if (a / h != a % 10) return false;
            a = a % h;
            a = a / 10;
            h = h / 100;
        }
        return true;

}  
编辑于 2015-05-07 15:06:08 回复(9)
bool isPalindrome(int x)
{
    if (x < 0)
    {
        return false;
    }
    int temp = x;
    int y = 0;
    while (temp != 0)
    {
        y = y * 10 + temp % 10;
        temp = temp / 10;
    }
    return x == y;
}

编辑于 2015-01-20 15:21:03 回复(7)
public class Test{
    public boolean isPalindromeNumber(long num){
        String str = num + "";
        int start = 0;
        int end = str.length() - 1;
        while(start <= end){
            char s = str.charAt(start);
            char e = str.charAt(end);
            if(s != e){
                return false;
            }else{
                start++;
                end--;
            }
        }
        return true;
    }
    
    public static void main(String[] args){
        Test t = new Test();
        t.isPalindromeNumber(12321); // true
        t.isPalindromeNumber(3); // true
        t.isPalindromeNumber(133431); //false
    }
}

发表于 2015-01-12 21:18:58 回复(2)
// 首尾去除法,时间复杂度:O(n/2),空间复杂度:O(1)
    public boolean isPalindromeNumber(long num) {
        // 负数
        if (num < 0) {
            return false;
        }

        int end = (new Long(num)).toString().length() - 1;
        while (num > 9) {
            if ((long) (num / Math.pow(10, end)) == (long) (num % Math.pow(10, 1))) {
                num = (long) (num % Math.pow(10, end));// 去掉最高位
                num = (long) (num / 10);// 去掉最低位
                end -= 2;
            } else {
                return false;
            }
        }
        return true;
    }

发表于 2015-04-24 11:23:51 回复(0)
同一种思路,转成String,然后反转String,比较反转前后是否相同
boolean isPalindromeNumber1(long num) {
        String numStr = num + "";
        int length = numStr.length();
        String str = "";
        for (int i = 0; i < length; i++) {
            str = numStr.charAt(i) + str;
        }
        if(numStr.equals(str)){
            return true;
        }else{
            return false;
        }
    }
boolean isPalindromeNumber2(long num) {
        String numStr = num + "";
        String str = StringBuffer(numStr).reverse().toString();
        if(numStr.equals(str)){
            return true;
        }else{
            return false;
        }
    }

 
 

编辑于 2015-05-07 10:52:26 回复(0)
 boolean isPalindromeNumber(long num) {
        long temp = num;
        long[] s=new long[19];
        int index=0;
        while (temp >0) {
            s[index++] = temp % 10;
            temp = temp/10;
        }
        for (int i=0;i<index/2;i++){
            if (s[i]!=s[index-1-i]){
                return false;
            }
        }
        return true;
    }

发表于 2015-03-11 15:00:13 回复(1)
答:java代码
boolean isPalindromeNumber(long l) {  
    char [] c = String.valueOf(l).toCharArray();  
    int len = c.length/2;  
    for (int i = 0; i < len; i++) {  
        if(c[i] != c[c.length-1-i]) {  
            return false;  
        }  
    }  
    return true;  
}  

发表于 2015-01-29 16:23:19 回复(0)
static boolean isPalindrome(String str){
        if(str.length()==0){
            return false;
        }
        int left = 0;
        int right = str.length()-1;
        while(left<right){
            if(str.charAt(left)!=str.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

发表于 2022-04-08 14:23:29 回复(0)
public  boolean isPalindromeNumber(long num) {
        String str = String.valueOf(num);
        char[] ch = str.toCharArray();
        for(int i=0,j=ch.length-1; i<=j; i++,j--) {
            if(ch[i] != ch[j])
                return false;
        }
        return true;
    }
发表于 2020-08-31 19:44:40 回复(0)
function check(num){
    var str = num.toString();
    return  str == str.split('').reverse().join('');
}
check(123321);

发表于 2017-09-18 12:55:36 回复(0)
boolean isPalindromeNumber(long num){
    StringBuilder sb = new StringBuilder(num);
    return sb.reverse().toString().equals(String.valueOf(num));
}

发表于 2016-09-19 23:44:24 回复(0)
public class HuiWen {
 static String s1 = ""; //存放的字符串
 static String s2 = ""; //存放前半部分
 static String s3 = ""; //存放后半部分
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println(isPalindromeNumber(3L));
 }
 static boolean isPalindromeNumber(long num){
   s1 = num + "";
   int length = s1.length() / 2; 
   s2 = s1.substring(0, length);
   StringBuilder s = new StringBuilder(num+"");
   s3 = s.reverse().substring(0, length);
   if(s2.equals(s3)){
    return true;
   }
   return false;
  }
}
发表于 2015-11-10 15:49:24 回复(0)
public static boolean isPalindromeNumber(long x){
		
		if (x<0) {
			return false;
		}		
		
		int factor = 10;		
		while (x/factor > 10) {
			factor *= 10;
		}

		return verifyPalindromeNumber(x,factor);
		
		
	}
	
	public static boolean verifyPalindromeNumber(final long x, final long factor){

		if( x==0 || x/factor == 0) return true;
		
		long last = x%10;
		long first = x/factor;
		if(last != first) return false;
		
		long next = (x % factor)/10;		
		return verifyPalindromeNumber(next, factor/100);
	}

发表于 2015-07-08 17:25:01 回复(0)
public static boolean isPalindromeNumber(long num) {
        boolean isPR = true;
        String numStr = String.valueOf(num);
        int length = numStr.length();
        for (int i = 0; i < length; i++) {
            if (numStr.charAt(i) != numStr.charAt(length - 1 - i)) {
                isPR = false;
                break;
            }
        }
        return isPR;
    }
发表于 2015-06-12 11:48:32 回复(0)

func isPalindromeNumber(num: Int) -> Bool {

    var newString:NSString

    newString = String(num)

    for var i=0;i<newString.length/2;i++ {

        var subStringHead = newString.substringWithRange(NSMakeRange(i, 1))

        var subStringTail = newString.substringWithRange(NSMakeRange(newString.length-i-1, 1));

        println("head:\(subStringHead)    tail:\(subStringTail)")

        if subStringHead == subStringTail {

            continue

        }else{

            return false

        }

    }

    return true

}


发表于 2015-06-03 17:28:20 回复(0)
public static  boolean isPalindromeNumber(long temp){
        if(temp<0){
            return false;
        }
        else{
            char[] emp = String.valueOf(temp).toCharArray();
            if(emp.length%2==0){
                return false;
            }
            else{
                for(int x=0;x<emp.length/2;x++){
                    if(emp[x]!=emp[emp.length-1-x]){
                        return false;
                    }
                }
                return true;
            }
        }
    }
发表于 2015-05-20 14:41:59 回复(0)
boolean isPalindromeNumber(long num){
    Long num1 = new Long(num);
    String str = num1.toString();
    StringBuilder sb = new StringBuilder(str);
    if(str.equals( sb.reverse() )){
        return true;    
        }else{
        return false;
         }
}
发表于 2015-05-04 17:32:15 回复(0)
    public boolean isPalindromeNumber(long num){
        String pNum = String.valueOf(num);
        StringBuffer sb = new StringBuffer();
        for(int i = pNum.toCharArray().length - 1 ; i>=0;i--){
            sb.append(pNum.substring(i,i+1));
        }
        System.out.println(sb);
        return pNum.equals(sb.toString());
    }
发表于 2015-05-03 22:00:39 回复(0)
boolean isPalindromeNumber(long num){
         if(num<0){
             return false;
         }if(num<10){
             return true;
         }else{
            String str= num+"";
            char[] strs = str.toCharArray();
            for(int i=0;i<strs.length/2;i++){
                if(strs[i] != strs[strs.length - 1 - i] || strs[i+1] != strs[strs.length - 2 - i]){
                    return false;
                }
            }
             return true;
        }
     }

编辑于 2015-04-28 17:13:44 回复(0)
boolean isPalindromeNumber(long number){
        String numberStr=number+"";
        if(numberStr.length()%2==1){
            if(numberStr.length()==1){
                return true;
            }else{
                String leftStr=numberStr.substring(0, numberStr.length()/2);
                String rightStr=numberStr.substring(numberStr.length()/2+1,numberStr.length());
                String sameStr="";
                for(int i=numberStr.length()/2;i>0;i--){
                    sameStr +=rightStr.charAt(i-1);
                }
                if(sameStr.equals(leftStr)){
                    return true;
                }else{
                    return false;
                }
            }
        }else{
            return false;
        }
    }
发表于 2015-04-24 14:32:01 回复(0)
kuring 学习了
发表于 2015-04-23 10:40:52 回复(0)