zoukankan      html  css  js  c++  java
  • 字符串问题----字符串中数字子串的求和

    字符串中数字子串的求和

      

      给定一个字符串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;
        }
    }
  • 相关阅读:
    正则匹配英文和数字
    python 正则匹配小数
    Error loading MySQLdb module: No module named 'MySQLdb'
    使用STL的next_permutation函数
    C++模板类之pair
    【转】Java迭代:Iterator和Iterable接口
    经典DFS问题实践
    Java 算法(背包,队列和栈)
    深度学习caffe测试代码c++
    opencv测试代码
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9478817.html
Copyright © 2011-2022 走看看