无名 发表于 2022-5-8 18:40:28

【HC】回文数


题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。C++将整数转换成字符串,再创建一个新的string将其复制,对新string使用algorithm库中的reverse方法进行翻转,对比翻转前后的字符串是否相等。注意此处应先判断输入的整数是负数的情况。0~9均是回文数,回文数从10开始判断。执行用时:12ms内存消耗:8.1MBclass Solution {public:    bool isPalindrome(int x) {      string res1 = to_string(x);                        //先转换成字符串再复制         string res2 = res1;      if(x < 0 || (x != 0 && x % 10 == 0)){            return false;      }else{      reverse(res2.begin(), res2.end());      }      if(res1 == res2){            return true;          }else{            return false;      }    }};1234567891011121314151617Python将整数转换成字符串的做法:执行用时:80ms内存消耗:14.1MBclass Solution:    def isPalindrome(self, x: int) -> bool:      strx1 = str(x)      n = len(strx1)      strx2 = ''      for i in range(n):              strx2 = strx1 + strx2      if strx2 == strx1:              return True      else:            return False1234567891011直接遍历:执行用时:64ms内存消耗:14.1MBclass Solution:    def isPalindrome(self, x: int) -> bool:      return str(x) == str(x)[::-1]123不将整数转换成字符串:执行用时:68ms内存消耗:13.9MBclass Solution:    def isPalindrome(self, x: int) -> bool:      revnum = 0      if x<0 or (x!=0 and x%10==0):            return False      while x > revnum:            revnum = revnum*10 + x%10            x = x // 10      return revnum//10 == x or revnum == x123456789C此处采用对整数所有数字进行翻转然后比较,也可以对一半进行翻转。对所有数字翻转时,需要注意翻转后的数超出 int 范围溢出的情况。翻转时,直接对末尾取余,然后通过乘十将其移到前一位。对所有数字进行翻转:执行用时:20ms内存消耗:8MBbool isPalindrome(int x){    long res = 0, num = x;    if(x < 0 || (x != 0 && x % 10 == 0)){      return false;    }else{      while(num != 0){            res = res*10 + num%10;            num /= 10;      }    }    return x==res;}123456789101112对后一半数字进行翻转:执行用http://cdn.u1.huluxia.com/g3/M02/38/FC/wKgBOV3JQeCATTb5AAB7c6R6rKQ932.jpg
页: [1]
查看完整版本: 【HC】回文数