zoukankan      html  css  js  c++  java
  • 将整数字符串转成整数值

    题目描述:

    给定一个字符串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)

    欢迎评论,共同进步!!

  • 相关阅读:
    [蓝桥杯][算法提高VIP]传染病控制
    PAT甲级第二次真题练习
    BFS()搜索加上hash
    PAT甲级第一次真题练习
    一个小练习题
    八皇后
    【Noi 1994 删数问题】【openjudge 3528 最小新整数(变式)】整型与字符
    【openjudge 2469 电池的寿命】算法与思维
    MarkDown测试
    HNOI 2017 怼大佬
  • 原文地址:https://www.cnblogs.com/hengzhezou/p/11060602.html
Copyright © 2011-2022 走看看