[算法练习-剑指offer]题49.把字符串转换成整数(Java)

题目

题号:49
题目名:把字符串转换成整数

编程语言

Java

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入描述:

输入一个字符串,包括数字字母符号,可以为空

输出描述:

如果是合法的数值表达则返回该数字,否则返回0

示例1

输入

+2147483647
1a33

输出

2147483647
0

初次思路

想要str是可以被转换的字符串,首字符可以是"+","-"或者是数字字符

判断是+或者-,cal来记录

然后直接用while遍历,将每个位数进行相加

这里要注意,越界的数也不算正常的数,int范围是[-2147483647,2147483647]

解题代码

public class Solution {
    public int StrToInt(String str) {
        if(str== null || str.length() ==0) return 0;
        char[] chars = str.toCharArray();
        if(!(chars[0]=='+'||chars[0]=='-'||(chars[0]>='0'&&chars[0]<='9'))) return 0;
        int cal =chars[0]=='-'?-1: 1;//如果是+或者数,那就做1乘,否则就是-1乘
        long sum =0;
        int curr = (chars[0]=='+'||chars[0]=='-')?1:0;//定义遍历起点,如果第一位是+或者-,就移动到第二位
        if(curr>=chars.length||chars[curr]=='0') return 0;//第一位越界或者是0,直接返回错误
        while(curr<chars.length) {
            if(!(chars[curr]>='0'&&chars[curr]<='9')) return 0;
            long i = chars[curr]-'0';
            sum=i+(sum*10);
            if(sum>2147483647) return 0;//如果超出int返回,返回错误
            curr++;
        }
        return (int)sum*cal;
    }
}


算法练习代码我都开源在码云上,有需要的朋友可以看看

https://gitee.com/xiaoxiaoyuworkspace/offeralgorithm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值