美文网首页
String to Integer (atoi)

String to Integer (atoi)

作者: 瞬铭 | 来源:发表于2019-02-22 15:44 被阅读0次
    https://leetcode.com/problems/string-to-integer-atoi/
    

    这道题的核心是string2int,但是leetcode强加了很多自己的限制

    • 删除空格开头的无效字符(只有空格开头),非空格字符开头默认为无法转化( 123可转,而asdf123不可转)
    • 只转连续int数字,小数点和非数字字符默认打断转化(3223wer123转为3223,333.232转为333)
    • 考虑正负符号,只能出现一次,且必须出现在数字头部
    • 32位int的边界问题 -2^32 到2^32-1
    class Solution {
    
        /**
         * @param String $str
         * @return Integer
         */
        function myAtoi($str) {
            $arrStr = str_split(trim($str));
            $res    = "";
            $flag   = 1;
    
            //不是以数字开头,或者不是以正负号开头,则直接返回0
            if (!ctype_digit($arrStr[0]) && $arrStr[0] != "+" && $arrStr[0] != "-") {
                return 0;
            }
            foreach ($arrStr as $k => $st) {
    
                //有了正负号后,下面一定跟着数字,否则不再继续往下遍历
                if ($st == "+" || $st == "-") {
                    if (($k < count($arrStr) -1) && !ctype_digit($arrStr[$k + 1])) {
                        break;
                    }
    
                    //正负号一定在第一个
                    if($k != 0){
                        break;
                    }
    
                    if ($st == "-") {
                        $flag = -1;
                    }
                    continue;
                }
    
                if (!ctype_digit($st)) {
                    break;
                }
    
                $res .= $st;
    
            }
    
            //判断int是否越界,-2^32 到2^32-1
            if (intval($res) >= pow(2, 31)) {
                $res = $flag > 0 ? pow(2, 31)  -1 : pow(2, 31);
            }
            return $flag * intval($res);
        }
    }
    

    相关文章

      网友评论

          本文标题:String to Integer (atoi)

          本文链接:https://www.haomeiwen.com/subject/oyueyqtx.html