当前位置:   article > 正文

【简单】字符串中数字子串的求和-Java_字符串相加求和 java

字符串相加求和 java

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程

  1. package live.every.day.ProgrammingDesign.CodingInterviewGuide.String;
  2. /**
  3. * 字符串中数字子串的求和
  4. *
  5. * 【题目】
  6. * 给定一个字符串str,求其中全部数字串所代表的数字之和。
  7. *
  8. * 【要求】
  9. * 1.忽略小数点字符,例如"A1.3”,其中包含两个数字1和3。
  10. * 2.如果紧贴数字子串的左侧出现字符"-",当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数时,则数字视为正。例
  11. * 如,"A-1BC--12",其中包含数字为-1和12。
  12. *
  13. * 【难度】
  14. * 简单
  15. *
  16. * 【解答】
  17. * 解决本题能做到时间复杂度为O(N)、额外空间复杂度为O(1)的方法有很多。本文仅提供一种供读者参考。解法的关键是如何在从左到
  18. * 右遍历str时,准确收集每个数字并累加起来。具体过程如下:
  19. *
  20. * 1.生成三个变量。整型变量res,表示目前的累加和;整型变量num,表示当前收集到的数字;布尔型变量isPositive,表示如果把
  21. * num累加到res里,num是正还是负。初始时,res=0,num=0,isPositive=true。
  22. * 2.从左到右遍历str,假设遍历到字符cha,根据具体的cha有不同的处理。
  23. * 3.如果cha是'0'~'9',cha-'0'的值记为cur,假设之前收集的数字为num,num=num*10+(isPositive?cur:-cur)。
  24. * 4.如果cha不是'0'~'9',此时不管cha具体是什么,都是累加时,令res+=num,然后令num=0,累加完num当然要清零。累加完成
  25. * 后,再看cha具体的情况。如果cha不是字符-,令isPositive=true,即如果cha既不是数字字符,也不是'-'字符,isPositive
  26. * 都变为true。如果cha是字符'-',此时看cha的前一个字符,如果前一个字符也是'-'字符,则isPositive改变符号,即
  27. * isPositive=!isPositive;否则令isPositive=false。
  28. * 5.既然我们把累加的时机放在了cha不是数字字符的时候,那么如果str是以数字字符结尾的,会出现最后一个数字没有累加的情况。
  29. * 所以遍历完成后,令rest+=num,防止最后的数字累加不上的情况发生。
  30. * 6.最后返回res。
  31. *
  32. * 具体实现请参看如下代码中的numSum方法。
  33. *
  34. * @author Created by LiveEveryDay
  35. */
  36. public class NumberSubStringSum {
  37. public static int numSum(String str) {
  38. if (str == null) {
  39. return 0;
  40. }
  41. char[] charArr = str.toCharArray();
  42. int res = 0;
  43. int num = 0;
  44. boolean isPositive = true;
  45. int cur = 0;
  46. for (int i = 0; i < charArr.length; i++) {
  47. cur = charArr[i] - '0';
  48. if (cur < 0 || cur > 9) {
  49. res += num;
  50. num = 0;
  51. if (charArr[i] == '-') {
  52. if ((i - 1) > -1 && charArr[i - 1] == '-') {
  53. isPositive = !isPositive;
  54. } else {
  55. isPositive = false;
  56. }
  57. } else {
  58. isPositive = true;
  59. }
  60. } else {
  61. num = num * 10 + (isPositive ? cur : -cur);
  62. }
  63. }
  64. res += num;
  65. return res;
  66. }
  67. public static void main(String[] args) {
  68. String str1 = "A1CD2E33";
  69. String str2 = "A-1B--2C--D6E";
  70. System.out.printf("sum1 = %s%n", numSum(str1));
  71. System.out.printf("sum2 = %s%n", numSum(str2));
  72. }
  73. }
  74. // ------ Output ------
  75. /*
  76. sum1 = 36
  77. sum2 = 7
  78. */
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45538
推荐阅读
相关标签
  

闽ICP备14008679号