前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 08字符串转整数&&09回文数

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

作者头像
bigsai
发布2020-08-20 09:52:49
3060
发布2020-08-20 09:52:49
举报
文章被收录于专栏:bigsaibigsai

08字符串转整数

题目描述:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

分析:

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

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

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

通过代码为:

代码语言:javascript
复制
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 。因此它不是一个回文数。

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

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

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

在这里插入图片描述

实现代码为:

代码语言:javascript
复制
//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左右。

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

在这里插入图片描述

代码语言:javascript
复制
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%多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bigsai 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 09回文数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档