题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
解题思路
常规思路,先判断第一位是不是符号位,如果有符号,有flag 做标记。遍历字符串中的每个字符,如果存在非数字的字符,直接返回 0,否则,用当前字符减去’0’得到当前的数字,再进行运算。
参考代码
Java
public class Solution {
public int StrToInt(String str) {
// 边界
if(str.length() == 0)
return 0;
int flag = 0; // 符号标记
if(str.charAt(0) == '+')
flag = 1;
else if(str.charAt(0) == '-')
flag = 2;
int start = flag > 0 ? 1 : 0;// 判断是否有正负号
long res = 0;
while(start < str.length()){
// 字符中存在不是数字的字符
if(str.charAt(start) > '9' || str.charAt(start) < '0')
return 0;
res = res * 10 + (str.charAt(start) - '0');
start ++;
}
return flag == 2 ? -(int)res : (int)res;
}
}
Python
# -*- coding:utf-8 -*-
class Solution:
def StrToInt(self, s):
# write code here
if len(s) == 0:
return 0
flag, res = 0, 0
if s[0] == '+':flag = 1
if s[0] == '-':flag = 2
start = 0 if flag == 0 else 1
while start < len(s):
if s[start] > '9' or s[start] < '0':return 0
res = res*10 + int(s[start])
start += 1
return -res if flag == 2 else res
个人订阅号
image
网友评论