当前位置:首页 > 未命名 > 正文内容

【解题报告】【lintcode54】String to Integer II

u3blog9年前 (2016-05-18)未命名338

题意

一个字符串中间含有一个整数数字,找出他,并转为数字返回

解答

主要分为三步来求解 1.使用正则表达式匹配字符串,看是否有符合条件的子串 2.根据匹配结果,再根据符号,小数点的位置确定执行操作串的长度和开始位置 3.对于每一个操作子串的字符进行处理,并加到结果上,最后处理边界和符号

代码

public class Solution {
    /**
     * @param str: A string
     * @return An integer
     */
  int num = 0;
    boolean flag;
    boolean isMax = false;
    int dig;
    public int atoi(String str) {
        str = str.trim();
      str =  hasNumber(str);//正则匹配
        if (str == null)
            return 0;
        flag = true;//开始处理长度
        int dot = str.indexOf(".");
        int fd = str.indexOf("-");
        int fp = str.indexOf("+");

        int len;
        if (dot >= 0)
            len =dot;
        else
            len = str.length();
        if (fd >= 0 || fp >= 0)
        {
            len--;
        }
        dig = len;
        int leng = str.length();
        if (dot > 0)
            leng = dot;//处理长度结束
        for (int i = 0;i < leng;i++)//开始处理每一位
        {
            if (!isMax)
                deal(str.charAt(i));
            else
                break;
        }
        if (isMax)
            return num;
        if (!flag)
            num *= -1;
        return  num;//结束处理返回结果
    }
   //字符处理
    public void deal(char c){
        if (c == '-'){
            flag = false;
            return;
        }
        if (c == '+'){
            flag = true;
            return;
        }
        if (num >= 0&& (num += (c-'0')*(int)Math.pow(10,dig-1)) < 0) {
            isMax = true;
            if (flag)
            num = 2147483647;
            else
                num = -2147483648;
        }
        dig--;
    }
    //正则匹配函数
    public String hasNumber(String s){
        String patterns ="[+,-]*[0-9]+[.]{0,1}[0]*";
        Pattern pattern = Pattern.compile(patterns);
        Matcher m = pattern.matcher(s);
        if (m.find()){
          patterns ="[+,-]{0,1}[0-9]+[.]{0,1}[0]*";
            pattern = Pattern.compile(patterns);
            String s1 = m.group(0);
            m = pattern.matcher(m.group(0));
            if (m.matches())
                return s1;
            else
            return null;
        }
        else
            return null;
    }
}

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=418

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。