zoukankan      html  css  js  c++  java
  • leetcode9 回文数

    注意观察输入是int X

    说明有范围

    并且有正负

     特殊情况特判并且防溢出即可

    负数,xxx0不会是回文数。

    0是回文数

    思路

    先想itoa转char*然后头尾对比。但是时间空间开销有。

    然后想直接int mod取首位但是首部不好取。

    那就直接从尾部开始,取x的后一半翻转,对比前半部分。

    辣么怎么判断到了一半奥

    一般情况可以搞一个table判断先判断x的位数:

    final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
                                          99999999, 999999999, Integer.MAX_VALUE };
    
    // Requires positive x
    static int stringSize(int x) {
        for (int i=0; ; i++)
            if (x <= sizeTable[i])
                return i+1;
    }

    这里简单的处理

    while(rest>tail)即可,因为到达中间时位数多一位

    这样奇数位时只需考虑tail后几位

    偶数位时,tail会比rest多两位(假如不是回文数)

    class Solution {
    public:
        bool isPalindrome(int x) {
            int tail=0;
            if(x==0)
                return true;
            if(x<0||(x%10==0))
                return false;
            
            while(x > tail) {
                tail = tail * 10 + x % 10;
                x /= 10;
            }
            //if()
            return x == tail || x == tail/10;  
        }
    };
  • 相关阅读:
    js中this的用法
    js原型链与继承(初体验)
    关于C语言指针中的p++与p+i
    react todolist
    react表单提交
    react条件渲染
    react初体验
    初次接触express
    阿里内推在线编程题(返回元素的选择器)
    模块初始化
  • 原文地址:https://www.cnblogs.com/lqerio/p/11746285.html
Copyright © 2011-2022 走看看