将整数字符串转成整数值

题目描述:

给定一个字符串str,如果str符合日常书写的整数形式,并且属于32位整数的范围,返回str所代表的整数值,否则返回0。

举例:

str=“123”,返回123

str=“023”,因为“023”不符合日常的书写习惯,所以返回0

str=“A13”,返回0

str=“0”,返回0

str=“2147483647”,返回2147483647

str=“2147483648”,因为溢出了,所以返回0

str=“-123”,返回123

 

思路:

首先检查str是否符合日常书写的整数形式

 1 public boolean isValid(char[] chas) {
 2         if (chas[0]!='-'&&((chas[0]<'0'||chas[0]>'9'))) {
 3             return false;
 4         }
 5         if (chas[0]=='-'&&(chas.length==1||chas[1]=='0')) {
 6             return false;
 7         }
 8         if (chas[0]==0&&chas.length>1) {
 9             return false;
10         }
11         for (int i=0; i<chas.length; i++) {
12             if (chas[i]<'0'||chas[i]>'9') {
13                 return false;
14             }
15         }
16         return true;
17     }

valid adj. 有效的;有根据的;合法的;正当的(写代码顺便记记单词,英语太差!!)

 

convert方法:

public class Solution {
    public boolean isValid(char[] chas) {
        if (chas[0]!='-'&&((chas[0]<'0'||chas[0]>'9'))) {
            return false;
        }
        if (chas[0]=='-'&&(chas.length==1||chas[1]=='0')) {
            return false;
        }
        if (chas[0]=='0'&&chas.length>1) {
            return false;
        }
        for (int i=1; i<chas.length; i++) {
            if (chas[i]<'0'||chas[i]>'9') {
                return false;
            }
        }
        return true;
    }
    public int convert(String str) {
        if (str==null||str.equals("")) {
            return 0;
        }
        char[] chas=str.toCharArray();
        if (!isValid(chas)) {
            return 0;
        }
        boolean posi=chas[0]=='-'?false:true;
        int minq=Integer.MIN_VALUE/10;
        int minr=Integer.MIN_VALUE%10;
        int res=0;
        int cur=0;
        for (int i=posi?0:1; i<chas.length; i++) {
            cur='0'-chas[i];
            if ((res<minq)||(res==minq&&cur<minr)) {
                return 0;
            }
            res=res*10+cur;
        }
        if (posi&&res==Integer.MIN_VALUE) {
            return 0;
        }
        return posi?-res:res;
    }
}

测试了好多用例,应该没错!!

下一个博客是LeetCode8 字符串转换整数(atoi)

欢迎评论,共同进步!!

转载于:https://www.cnblogs.com/hengzhezou/p/11060602.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值