LeetCode之路—— Palindrome Number

来源:互联网 发布:php生成短网址 编辑:程序博客网 时间:2024/06/07 13:58

题目要求:判断一个整形数字是否是回文,空间复杂度O(1)
思路:题目要求空间复杂度是O(1),那么就不能用将整形转成字符串然后取第一个字符和最后一个字符比较,那么只能取整数的最高位和最低位比较,若相等则循环,不等则返回false。
特殊情况:若为负数则返回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
原创粉丝点击