zoukankan      html  css  js  c++  java
  • leetcode-9.-回文数


    本题是leetcode,地址:9. 回文数

    题目

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    示例 1:

    输入: 121
    输出: true
    示例 2:

    输入: -121
    输出: false
    解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    示例 3:

    输入: 10
    输出: false
    解释: 从右向左读, 为 01 。因此它不是一个回文数。
    进阶:

    你能不将整数转为字符串来解决这个问题吗?

    分析

    此题有两种解法:1、变换为字符串;2、通过数字反转

    字符串的回文很简单,双子针,一个从前往后,一个从后往前,判断字符是否相等即可,终止条件是双子针相等了,看代码;

    code-字符串

    public boolean isPalindrome(int x) {
          String s = x + "";
          char[] chars = s.toCharArray();
          int left = 0;
          int right = chars.length - 1;
          while(left <= right) {
            if(chars[left] != chars[right]) {
                return false;
            }
            left++ ;
            right--;
          }
          return true;
    } 
    

    code-数字反转

    对于一个数字,我们对其%10操作,可以得到该数的最后一位数字,例如1221对10取余得到1,持续%10,则可以得到每一位数字,如果我们对每次取余数的数字乘10操作,则可以得到对应的反转数字;

    当我们反转一半时,比较两个数是否相等即可;一半的判断条件就是不断取余的数组小于反转数字;

    ** 注:需要注意如果数字是121时,反转后我们得到两个数组1,12,直接舍弃最后一位数进行比较即可,看代码**

        public boolean isPalindrome(int x) {
          if(x == 0) return true;
          if(x < 0 || x % 10 == 0 ) return false;
          int rev = 0;
          while(x > rev) {
              rev = x % 10 + rev * 10;
              x = x / 10;
          }
          return x == rev || x  == rev / 10;
        }  
    

    你的鼓励也是我创作的动力

    打赏地址

  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/yangsanchao/p/13339791.html
Copyright © 2011-2022 走看看