今天我收到了这个面试问题。有人可以帮我解决一下吗?
/**
* Return the sum of all integers from a random string. Continuous Integers must be considered as one number.
* Given the following inputs, we expect the corresponding output:
*
* "1a2b3c" ==>6 (1+2+3)
* "123ab!45c" ==> 168 (123+45)
* "abcdef" ==> 0 (no integers in String)
* "0123.4" ==> 127 (0123+4)
* "dFD$#23++++12@#T1234;/..10" => 1279 (23+12+1234+10)
* "12a-10b" => 2 (12-10)
*/
private static long SumOfNumbers (String str){
return null;
答案 0 :(得分:0)
当您没有尝试任何研究时,我们无法为您提供整体解决方案。但要提示如何解决,
这应该是你应该做的事情的方法。那么你是怎么做到的。尝试研究,然后在出现技术问题时发布问题。
答案 1 :(得分:0)
您可以逐个字符地执行此操作,只需累积数字(和符号)并在检测到数字结束时对它们求和。
算法会是这样的:
$urlRouterProvider.when('', '/resources/listView/kristin');
基本上,如果你得到一个数字,你可以将它添加到累加器(用于构建当前数字)。
每当你发现一个带有非零累加器的非数字时,你将累加器添加到总数中,并根据当前字符是set sign to 1.
set total to 0.
set accum to 0.
for each character:
if character is digit:
accum = accum * 10 + value(character)
elif accum > 0:
total = total + sign * accum
accum = 0
if character is '-':
sign = -1
else:
sign = 1
else:
if character is '-':
sign = -sign
if accum > 0:
total = total + sign * accum
还是其他东西设置符号(但它不能是此时的数字)。
如果您在累加器中没有非数字且没有任何内容,则只需将-
个符号作为特殊情况处理,以便选择-
之类的内容作为--10
最后,您再次添加一个非零累加器,以考虑您可能以数字结尾。
答案 2 :(得分:0)
尝试以下代码
private static long SumOfNumbers(String str) {
int digit = 0, number = 0;
long sum = 0;
// Iterate through each character in the input string
for (int i = 0; i < str.length(); i++) {
// Convert the character to integer
digit = Integer.valueOf(str.charAt(i)) - '0';
// Check if the character is a integer
// add the digits till a non-integer is encountered
if (digit >= 0 && digit <= 9) {
number = number * 10 + digit;
} else {
sum += number;
number = 0;
}
}
sum += number;
return sum;
}