【发布时间】:2019-10-03 04:59:26
【问题描述】:
这是我在竞争性编程中遇到的问题之一。
Ques) 您有一个二进制格式的输入字符串11100,您需要计算其中数字为零的步数。如果号码是odd -> subtract it by 1,如果是even -> divide it by 2。
例如
28 -> 28/2
14 -> 14/2
7 -> 7-1
6 -> 6/2
3 -> 3-1
2 -> 2/2
1-> 1-1
0 -> 停止
步数 =7
我想出了以下解决方案
public int solution(String S) {
// write your code in Java SE 8
String parsableString = cleanString(S);
int integer = Integer.parseInt(S, 2);
return stepCounter(integer);
}
private static String cleanString(String S){
int i = 0;
while (i < S.length() && S.charAt(i) == '0')
i++;
StringBuffer sb = new StringBuffer(S);
sb.replace(0,i,"");
return sb.toString();
}
private static int stepCounter(int integer) {
int counter = 0;
while (integer > 0) {
if (integer == 0)
break;
else {
counter++;
if (integer % 2 == 0)
integer = integer / 2;
else
integer--;
}
}
return counter;
}
这个问题的解决方案看起来非常简单明了,但是这段代码的性能评估让我得到了一个很大的零。我最初的印象是,将字符串转换为 int 是一个瓶颈,但未能找到更好的解决方案。谁能给我指出这段代码的瓶颈以及可以显着改进的地方?
【问题讨论】:
标签: java string algorithm binary