• 9.回文数


    题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
    示例 1: 输入: 121 输出: true
    示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

    • 常规解法:先反转再和原数做比较
    bool isPalindrome(int x){
        int num = x;
        long res = 0;  //注意这里要用long类型的数,有些不是回文数最后的数字可能很大
     
        if(x == 0) return true;
        else if(x < 0) return false;
        else{
            while(num > 0){
                res = res * 10 + num % 10;
                num = num / 10;
            }
            if(res == x) return true;
            else return false;
        }
    }
    //JS
    
    /**
     * @param {number} x
     * @return {boolean}
     */
    var isPalindrome = function(x) {
        if(x < 0) return false;
       
        let num = x, res = 0;
        while(num != 0){
            res = res * 10 + num % 10;
            num = Math.floor(num / 10);
        }
        if(res != x) return false;
        return true;
    };
    //数字转换成字符串后再双指针遍历
    
    var isPalindrome = function(x) {
        if(x < 0) return false;
        let str = "";
        str += x;
        for(let i = 0, j = str.length - 1; i < j; i++, j--)
            if(str[i] != str[j]) return false;
        
        return true;
    };

     

    补充:判断字符串是否是回文串

    • 空间换时间:从尾到头将字符串a赋值给字符串b,再从头开始比较a和b,全部相同则是回文
    int isPalindrome1() 
    { 
        int j,i,n; 
        char a[999],b[999]; 
    	printf("Please input string: ");
        scanf("%s",a);              //输入字符串 
        n=strlen(a);                //用strlen函数读取字符串长度(长度到停止) 
        for(i=0,j=n-1;i<n;i++,j--)  //循环将字符串a逆序赋值给b 
            b[j]=a[i];
        for(i=0;i<n;i++) 
        { 
            if(b[i]!=a[i]) 
    		 break;                 //判断是否回文 
        } 
        if(i==n) printf("是一个回文数!
    ");     //如果从第1位到n都相同 则输出回文数 
        else printf("不是一个回文数!
    "); 
        return 0; 
    }
    • 第i个位置上的字符和第n-1-i位置上的字符做比较
    int isPalindrome2(char *str)
    {
        int i,n=0,fg=1;                 //设置标志位
        char *p=str;
        while(*p){                      //将指针p置位到字符串末尾,并统计字符数
            n++;
            p++;
        }
        for(i=0;i<n/2;i++){             //循环比较字符
        if(str[i]!=str[n-1-i]){
            fg=0;
            break;
            }
        }
        return fg;
    }
    

      

  • 相关阅读:
    [POJ1811]Prime Test
    Pollard-rho算法[因子分解算法]
    Miller-Rabin算法
    [POJ2886]Who Gets the Most Candies?
    Failed to connect to raw.githubusercontent.com port 443
    MAC安装flutter开发环境
    Jenkins自动化打包(Gitlab)并上传蒲公英
    Jenkins中插件下载失败的解决办法
    iOS开发~防止navigation多次push一个页面
    Jenkins 更新 jenkins.war的方法
  • 原文地址:https://www.cnblogs.com/JesseyWang/p/12938693.html
Copyright © 2020-2023  润新知