Leetcode 第8题 字符串转换整数(atoi)

Leetcode 第8题 字符串转换整数(atoi)

今天写道力扣第八题 看到有评论说java的判断溢出不容易, 便自己实现了这个代码, 用力扣上的判断方式
java的Integer类有Integer.Max和Integer.Min属性, 我用的当前数乘以十加上个位判断是否溢出
1.判断上溢出:(sum > Integer.Max / 10 || (sum == Integer.Max/10 && pop > 7))这里pop是要加上的个位的数。
2.判断下溢出:(sum < Integer.Max / 10 || (sum == Integer.Max/10 && pop < -8))

// An highlighted block
public static int myAtoi(String str) {
		if (str == null || str.length() == 0) {
			return 0;
		}
		char[] arr = str.toCharArray();
		int flag = 1;
		int i = 0;
		while (i < arr.length && arr[i] == ' ') {
			i++;
		}
		if (i == arr.length) {
			return 0;
		}
		
		if (arr[i] == '-' || arr[i] == '+') {
			if (arr[i] == '-') {
				flag = -1;
			}
			i++;
		}
		
		int sum = 0;
		for (; i < arr.length && arr[i] >= '0' && arr[i] <= '9'; i++) {
			if (flag < 0) {
				
				if (sum < Integer.MIN_VALUE / 10 || (sum == Integer.MIN_VALUE / 10 && arr[i] - '0' > 8)) {
					
					return Integer.MIN_VALUE;
				}
				int tem = arr[i] - '0';
				sum = (sum * 10 - tem);
				if (sum > 0) {
					sum = 0 - sum;
				}
			} else {
				if (sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && arr[i] - '0' > 7)) {
					return Integer.MAX_VALUE;
				}
				int tem = arr[i] - '0';
				sum = (sum * 10 + tem);
			}
		}
		return sum;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值