zoukankan      html  css  js  c++  java
  • atoi问题

    atoi问题

    1.问题描述

    Implement atoi to convert a string to an integer.
    Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
    Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
    题目翻译:
    实现一个atoi函数,完成从string到int的转换。要仔细的考虑所有可能输入的情况,才能完成这道题。

    2.解题思路

    这道题特殊的地方就是必须想清楚所有的可能情况,不然就通不过leetcode的用例测试,这是很麻烦的地方,现将需要注意的情况总结如下:
    1.string最开始是空格即' ',要跳过所有的空格,但是空格可能不存在。
    2.在空格之后是表示正负的符号:'+'/'-',要正确的读取这些符号。
    3.之后是数字,要正确的读取并计算出相应的数值,同时要注意数值的范围问题,因为可能存在数值的溢出,正数溢出输出INT_MAX,负数溢出输出INT_MIN。
    4.全是非数字字符
    5.数值之中出现非数值字符,只输出当前已经计算得到的数值
    是要在程序中解决这5点,程序既能够通过leetcode的用例。

    3.代码实现

    1. class Solution
    2. public static int myAtoi(String str)
    3. int len=str.length(); 
    4. if(len<=0
    5. return 0
    6. char[] ch=str.toCharArray();//把str变成char数组,速度更快 
    7. int pos=0,res=0,sign=1,dit=0
    8. int tmp=0
    9. while(ch[pos]==' '&&pos<len) {//跳过所有的空格 
    10. pos++; 

    11. if(ch[pos]=='+'||ch[pos]=='-') {//检测是正数还是负数,但是都按照正处理 
    12. sign=(ch[pos]=='+'?1:-1); 
    13. pos++; 

    14. for(;pos<len;) { 
    15. dit = ch[pos]-'0'
    16. if(dit<0||dit>9)//处理数值中间出现非数值,还有全部都不是数值情况 
    17. break
    18. //判断是否越界,当res>INT_MAX/10时那么下一步肯定越界, 
    19. //如果等于INT_MAX/10,那就需要比较最后一位,因为INT_MAX的最后一位是7, 
    20. //大于7就肯定会溢出。 
    21. if(Integer.MAX_VALUE/10 < res || Integer.MAX_VALUE/10 == res && Integer.MAX_VALUE %10 < dit) 
    22. return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; 
    23. tmp = res*10+dit; 
    24. /* 
    25. if(tmp/10 != res) { 
    26. return tmp*sign>Integer.MAX_VALUE?Integer.MAX_VALUE:Integer.MIN_VALUE; 
    27. } 
    28. */ 
    29. res=tmp; 
    30. pos++; 

    31. return res*sign;//返回结算结果 
    32.  
    33. }  
    34.  

  • 相关阅读:
    PostMan-NewMan运行参数
    shell脚本学习简单记录笔记
    android开发okhttp-4.9.1源码大致流程解读
    android开发获取键盘高度以及判断键盘是否显示(兼容分屏模式)
    Android开发The style on this component requires your app theme to be Theme.AppCompat (or a descendant)的解决方法
    Linux开发Ubuntu安装man手册
    Android开发源码解读四大组件源码解读简单梳理
    Android开发涉及到的AMS类和ActivityThread类源码解读
    Android开发为什么主线程可以一直运行而不会退出来
    前端CryptoJS加密、后端解密代码实现参考
  • 原文地址:https://www.cnblogs.com/chailinbo/p/7473201.html
Copyright © 2011-2022 走看看