码迷,mamicode.com
首页 > 其他好文 > 详细

字符串问题----字符串中数字子串的求和

时间:2018-08-14 23:58:54      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:class   com   问题   个数   pac   rar   字符串   --   字符   

字符串中数字子串的求和

  

  给定一个字符串str,求其中全部数字串所代表的数字之和

  1. 忽略小数点,“ A1.3 ” 表示的数字就是包含两个数字 1 和 3

  2. 紧贴数字的左边出现 “-”,其连续出现的数量如果为奇数,就视为 负,如果为偶数,就视为 正 “ A-1BC--23” 表示的是 -1 和 23

  

  【解题思路】

  首先定义三个变量, res表示目前的累加和,num表示当前收集到的数字,布尔型变量flag表示将num加到res中,num是正还是负,具体可以看代码中的注释。

  可以做到时间复杂度是O(N),空间复杂度是O(1)

package com.test;

/**
 * Created by Demrystv.
 */
public class SumOfSubNumArr {

    /*
    时间复杂度是O(N),空间复杂度是O(1)
    首先定义三个变量, res表示目前的累加和,num表示当前收集到的数字,布尔型变量flag表示将num加到res中,num是正还是负
     */
    public int sumOfSubNumArr(String str){
        if (str == null || str.length() == 0){
            return 0;
        }
        char[] chars = str.toCharArray();
        int res = 0;
        int num = 0;
        boolean flag = true;
        int cur = 0;
        for (int i = 0; i < chars.length; i++) {
            cur = chars[i] - ‘0‘;

            //如果不是在数字0到9 之间
            if (cur < 0 || cur > 9){
                res += num;
                num = 0; //用完之后应置为0

                //不在0到9之间,同时等于“-”
                if (chars[i] == ‘-‘){
                    if (i - 1 > -1 && chars[i - 1] == ‘-‘){
                        flag = !flag;
                    }else {
                        flag = false;
                    }
                }else {
                    flag = true;
                }
            }else {
                // 在0和9之间
                num = num * 10 + (flag ? cur : -cur);
            }
        }
        res += num;
        return res;
    }
}

 

字符串问题----字符串中数字子串的求和

标签:class   com   问题   个数   pac   rar   字符串   --   字符   

原文地址:https://www.cnblogs.com/Demrystv/p/9478817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!