【牛客】把字符串转换成整数

💒把字符串转换成整数

在这里插入图片描述

🧸读题

字符串转整形,遇到不是 + -的其他字符直接返回0;
而这里的+ - 是正负数的意思,正数要省略+ ,负数要显示-

🧸代码

我的思路是,管他正负,直接转,遇到其他字符返回0
当是结果要求是正数,就直接输出。
如果是负数,就用的得到的正数减去2倍的自己

class Solution {
public:
    bool isNumber(char ch)
    {
        if(ch >= '0' && ch<= '9')
        {
            return true;
        }
        else if( ch == '+' || ch =='-')
        {
            return true;
        }
        return false;
    }
    int StrToInt(string str) {
        //'1' - '0' = 1
        int end = str.size()-1;
        int ret = 1;//计算位数
        int count = 0;//计数
        while(0 <= end)
        {
            while(0 <= end && !isNumber(str[end]))
            {
                return 0;
            }
            if(str[end] != '+'&& str[end]!='-')
            {
                count += (str[end] - '0')*ret;
                ret*=10;
            }
            --end;
        }
        if(str[0] == '-')
        {
            count -= 2*count; 
        }
        return count;
    }
};

🧸解读代码

class Solution {
public:
	是一个判断 数字的函数  是数字/+/-返回true,否则返回false
    bool isNumber(char ch)
    {
        if(ch >= '0' && ch<= '9')
        {
            return true;
        }
        else if( ch == '+' || ch =='-')
        {
            return true;
        }
        return false;
    }
    int StrToInt(string str) {
        //'1' - '0' = 1
    从尾部开始计算
        int end = str.size()-1;
        int ret = 1;//计算位数
        int count = 0;//计数
	end从后向前遍历,end小于0时 则停止,等于0 说明还有一个字符,也要进去
        while(0 <= end)
        {
   	判断是不是其他字符,是其他字符直接返回0
            while(0 <= end && !isNumber(str[end]))
            {
                return 0;
            }
    走到这就不是其他字符 要么是数字,要么是+-
    判断不是+- 就进去
            if(str[end] != '+'&& str[end]!='-')
            {
    来到这里,ret初始值一定是1
    因为是0的话 就一直输出0
                count += (str[end] - '0')*ret;
    各位是最后一位,所以最后一位*1还是各位
    第二次要*10 所以这里ret*=10
                ret*=10;
            }
    算玩一位,end要向前走
            --end;
        }
    这里判断负数,如果第一位是 - 则减去2倍的自己
        if(str[0] == '-')
        {
            count -= 2*count; 
        }
        return count;
    }
};

🌈其他大佬的代码我没怎么看,测试了一下,非常大的数都是一个效果,就是算不出来。这个算法是 O(N)。

🌈加油 祝你拿到心仪的offer!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值