🎨每日面试算法题---腾讯篇(三)

254 阅读1分钟

字符串转换整数

问题描述

将字符串按照一定的规则提取出数字。

题目链接:字符串转换整数 (atoi)

解法

这道题不难,但比较实用,在工作中我们经常会遇到这样的需求。建议自己手打,从头开始,看看自己可能会忽略的点,看看相应的报错是什么。(不同的语言对一些问题的处理方式是不同的,建议都试试)

我的刷题思路是这样的:并不是一定要刷很多题和很难的题,基础和实用最为重要,接下来是通过一些设计模式和解题思想来融会贯通。这里的基础最主要的就是数据结构,而实用则是类似于这样的比较简单但是工作中很常见的需求问题。而算法则统一包含在设计模式和解题思想中。(一些比较简单的算法比如冒泡排序,遍历,模拟这些不需要特意去掌握,而应该作为最基础的入门前提来看待)

下面是用java实现的:(js会更简单,也值得一试。)

class Solution {
    public int myAtoi(String s) {
        if(s.length() == 0) return 0;
        int index = 0;
        boolean b = true;
        while (s.charAt(index) == ' ' && index < s.length() - 1) index++;
        if(s.charAt(index) == ' ') return 0;
        if (index == s.length()) return 0;
        if (s.charAt(index) == '-') {
            b = false;
            index++;
            if (index == s.length()) return 0;
        }
        else if (s.charAt(index) == '+') {
            index++;
            if (index == s.length()) return 0;
        }
        int ans = 0;
        for (; index < s.length(); index++) {
            if (s.charAt(index) <= '9' && s.charAt(index) >= '0') {
                if (((long)ans * 10 + s.charAt(index) - '0') <= Integer.MAX_VALUE) {
                    ans *= 10;
                    ans += s.charAt(index) - '0';
                }
                else {
                    if(b)
                    return Integer.MAX_VALUE;
                    else return Integer.MIN_VALUE;
                }
            }
            else break;
        }
        return b ? ans : -ans;
    }
}

有什么问题或意见,可以在评论区提出😆。