LeetCode 08字符串转整数&&09回文数

简介: LeetCode 08字符串转整数&&09回文数

08字符串转整数



题目描述:


20200816124743103.png20200816124829631.png20200816124915353.png


分析:


本题主要是字符串的处理。需要注意以下几点:


  • 去除字符前的空字符
  • 第一个有效字符必须是符号或者数字
  • 只能有一个符号
  • 注意数值越界


所以在具体处理的时候,你可以截取一个字符然后直接转成一个数字类型(考虑越界)但是并不推荐。这里个人使用遍历字符串数字字符时候将其与'0'字符差转换成数字进行计算,当超出int范围直接停止。


通过代码为:


public static int myAtoi(String str) {  
    int zheng = 1;
    int index=0;
    long value=0;
    while (index<str.length()&&str.charAt(index)==' ') {//防止"" 和 "   "等
      index++;
    }
    if(index>str.length()-1)return 0;
    if(str.charAt(index)=='+') {index++;}
    else if (str.charAt(index)=='-') {
      zheng=-1;index++;
    }
    for(int j=index;j<str.length();j++)
    { 
      if(str.charAt(j)>='0'&&str.charAt(j)<='9')
      {
        value=value*10+str.charAt(j)-'0';
        if(value*zheng>Integer.MAX_VALUE)return Integer.MAX_VALUE;
        if(value*zheng<Integer.MIN_VALUE)return Integer.MIN_VALUE;
      }
      else {
        break;
      }
    }
    value=zheng*value;  
    return (int)value;
  }


09回文数



描述:

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


示例 1:

输入: 121

输出: true


示例 2:

输入: -121

输出: false

解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。


示例 3:

输入: 10

输出: false

解释: 从右向左读, 为 01 。因此它不是一个回文数。


分析:


此题比较简单,需要考虑以下几点:


  • 不能是负数,负数不满足回文数的要求
  • 考虑奇数偶数长度数字会文性


提供两种方法:第一种将数字转成字符串,从中间向两侧拓展比较。


20200816133505424.png


实现代码为:


//11%
   public boolean isPalindrome(int x) {
     if(x<0)return false;
     String va=x+"";
     int left=0,right=0;
     if(va.length()%2==0)
     {
       left=va.length()/2-1;right=left+1;
     }
     else {
      left=va.length()/2;right=left;
    }
     while (left>=0) {
      if(va.charAt(left)!=va.charAt(right))
        return false;
      left--;right++;
    }
     return true;
   }


但很遗憾这种方法效率比较低只能打败11%的人呢,大概18ms左右。


但是可以换一种思路,使用字符串比较效率较低。可以使用数字类型计算一遍得到逆向数值然后进行比较最终值是否相同:


20200816142213120.png


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


这样就大概9-10ms左右,9ms大概打败98%而10ms只40%多。


20200816135901883.png


最后



本周打开结束,本周打开题解为:


05最长回文串

06Z字形变换&07整数反转







目录
相关文章
|
1月前
|
存储
LeetCode整数反转
解决LeetCode上的整数反转问题的几种方法,包括错误的方法和优化后的解决方案,以及如何避免反转后的整数超出32位有符号整数范围的问题。
35 1
|
1月前
|
算法
LeetCode回文数(暴力解,求更好的思路)
这篇博客讨论了如何判断一个整数是否为回文数,提供了暴力解法的代码,并寻求更优的算法建议。
41 1
LeetCode回文数(暴力解,求更好的思路)
|
24天前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
31 1
|
1月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
24 9
|
1月前
【LeetCode】整数翻转
【LeetCode】整数翻转
15 1
|
1月前
|
存储 C++
Leetcode第十二题(整数转罗马数字)
LeetCode第12题“整数转罗马数字”的解题方法,包括罗马数字的基本规则和特殊规则,以及如何使用C++实现整数到罗马数字的转换。
15 0
|
1月前
|
C++
Leetcode第十三题(罗马数字转整数)
这篇文章介绍了LeetCode第13题“罗马数字转整数”的解题方法,通过一个C++的类`Solution`中的`romanToInt`函数来实现,该函数使用哈希表和遍历字符串的方法,根据罗马数字的规则将输入的罗马数字字符串转换为对应的整数值。
47 0
|
1月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
17 0
|
1月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
28 0
|
1月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
19 0