美文网首页皮皮的LeetCode刷题库
【剑指Offer】049——把字符串转换成整数(字符串、进制转化

【剑指Offer】049——把字符串转换成整数(字符串、进制转化

作者: 就问皮不皮 | 来源:发表于2019-08-21 17:18 被阅读15次

    题目描述

    将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

    输入描述:
    输入一个字符串,包括数字字母符号,可以为空
    
    输出描述:
    如果是合法的数值表达则返回该数字,否则返回0
    

    示例1

    输入
    +2147483647
        1a33
    
    输出
    2147483647
        0
    

    解题思路

    常规思路,先判断第一位是不是符号位,如果有符号,有flag 做标记。遍历字符串中的每个字符,如果存在非数字的字符,直接返回 0,否则,用当前字符减去’0’得到当前的数字,再进行运算。

    参考代码

    Java

    public class Solution {
        public int StrToInt(String str) {
            // 边界
            if(str.length() == 0)
                return 0;
            int flag = 0; // 符号标记
            if(str.charAt(0) == '+')
                flag = 1;
            else if(str.charAt(0) == '-')
                flag = 2;
            int start = flag > 0 ? 1 : 0;// 判断是否有正负号
            long res = 0;
            while(start < str.length()){
                // 字符中存在不是数字的字符
                if(str.charAt(start) > '9' || str.charAt(start) < '0')
                    return 0;
                res = res * 10 + (str.charAt(start) - '0');
                start ++;
            }
            return flag == 2 ? -(int)res : (int)res;
        }
    }
    

    Python

    # -*- coding:utf-8 -*-
    class Solution:
        def StrToInt(self, s):
            # write code here
            if len(s) == 0:
                return 0
            flag, res = 0, 0
            if s[0] == '+':flag = 1
            if s[0] == '-':flag = 2
            start = 0 if flag == 0 else 1
            while start < len(s):
                if s[start] > '9' or s[start] < '0':return 0
                res = res*10 + int(s[start])
                start += 1
            return -res if flag == 2 else res
    

    个人订阅号

    image

    相关文章

      网友评论

        本文标题:【剑指Offer】049——把字符串转换成整数(字符串、进制转化

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