剑指offer 49.综合 把字符串转换成整数

Posted transkai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 49.综合 把字符串转换成整数相关的知识,希望对你有一定的参考价值。

题目描述

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

输入描述:

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

输出描述:

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

输入

+2147483647
    1a33

输出

2147483647

0


解题思路

(1先用一个Map<String, Integer>将0-9的数字封装起来,如以“0”为key,以0为value;

  (2)将str转化为char[],再遍历该数组,如果char[]中存在一个元素在map中get不到,则表明该str不是一个合法的数值

(3判断str是否是以+或-开头的,如果是则遍历数组时就不是从第0位开始的,而是从第1位开始的,如果是以-开头,后面还要以负数的形式返回

  (4)为了避免溢出,最好先用long,最后再转回int

 

代码如下

 

public int StrToInt(String str) 
    if (str.equals("")) 
        return 0;
    
    Map<String, Integer> map=new HashMap<String, Integer>();
    for (int i = 0; i < 10; i++) 
        map.put(String.valueOf(i), i);    
    
    char[] array=str.toCharArray();
    boolean flag=true;
    long result=0;
    int i=0;
    if (String.valueOf(array[0]).equals("+")||String.valueOf(array[0]).equals("-")) i=1;
    for (; i < array.length; i++) 
        if (map.get(String.valueOf(array[i]))==null) 
            flag=false;
            break;    
        else 
            result+=map.get(String.valueOf(array[i]))*Math.pow(10, str.length()-1-i);
        
    
    if (!flag) 
        return 0;
    else 
        if (String.valueOf(array[0]).equals("-")) 
            return (int)(0-result);
        
        return (int)result;
    
        
    
public static void main(String[] args) 
    StrToInt strToInt=new StrToInt();
    System.out.println(strToInt.StrToInt("36"));

 

 

 

以上是关于剑指offer 49.综合 把字符串转换成整数的主要内容,如果未能解决你的问题,请参考以下文章

[剑指offer] 49. 把字符串转换成整数

剑指offer系列——49.把字符串转换成整数

剑指 Offer JZ49 把字符串转换成整数

剑指offer(三十二)之把字符串转换成整数

剑指offer把字符串转换成整数

剑指offer-把字符串转换成整数