皮皮的LeetCode刷题库

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

2019-08-21  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读