LeetCode之路——Palindrome Number

来源:互联网 发布:目前淘宝卖什么最火 编辑:程序博客网 时间:2024/06/05 06:15

题目要求:判断一个数是否为回文数,空间复杂度:O(1)
思路:因为空间复杂度要求是O(1),所以不能转成字符串然后用第一个和最后一个比较,只能通过取整数的最高位和最低位比较,若相等则去掉最高位和最低位循环比较,若不等返回false。
特殊情况:若为负数,则不是回文数。
贴上代码:

package leetcode;import javax.jws.soap.SOAPBinding;public class PalindromeNumber {    public static void main(String[] args) {        // TODO Auto-generated method stub        Solution_PN solu = new Solution_PN();        System.out.println(solu.isPalindrome(232));    }}class Solution_PN {    public boolean isPalindrome(int x) {        if(x<0)return false;//如果是负数直接返回false        int i=0,n=x;//i代表x为几位数        while(n/10!=0)        {            i++;            n/=10;        }        //System.out.println("i="+i);        while(i>0)        {            int m =(int)Math.pow(10, i);            /*System.out.println("m="+m);            System.out.println("x="+x);            System.out.println("x/m="+(x/m));            System.out.println("x%10="+x%10);*/            n=x/m;            if(n==x%10)            {                   int j=(int)Math.pow(10, i);                x=x-(x/j)*j;                x=x/10;                i=i-2;//去掉两个数            }            else                return false;        }        return true;            }}

这里再贴上一个代码易懂的:

class Solution {public:    bool isPalindrome(int x) {        //negative number        if(x < 0)            return false;        int len = 1;        while(x / len >= 10)            len *= 10;        while(x > 0)    {            //get the head and tail number            int left = x / len;            int right = x % 10;            if(left != right)                return false;            else    {                //remove the head and tail number                x = (x % len) / 10;                len /= 100;            }        }        return true;    }};

总结:问题虽然不难,但在取变量名的时候应该多用一些与问题域相符合的字母、单词或单词组合,在平时也要有符合编程规范的意识!

0 0