题目
写一个函数stringy,传入一个size并返回一个string(交替的'1'和'0')。
字符串应该以1开头。
带有size
6 的字符串应返回:'101010'。
当size
4 应返回:'1010'。
当size
12 应返回:'101010101010'。
注:size总是正整数。
测试用例:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import java.util.Random;
public class StringyExampleTests {
@Test
public void startTest() {
assertEquals("Your string should start with a 1", '1', Kata.stringy(3).charAt(0));
}
@Test
public void lengthTests() {
Random randGen = new Random();
for (int i = 0; i < 10; i++) {
int size = randGen.nextInt(50);
assertEquals("Wrong length using size " + size, size, Kata.stringy(size).length());
}
@Test
public void Tests() {
assertEquals("101010101010",Kata.stringy(12));
assertEquals("1",Kata.stringy(1));
}
}
}
解题
我的:
public class Kata {
public static String stringy(int size) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
if (i % 2 == 0) {
sb.append("1");
} else {
sb.append("0");
}
}
return String.valueOf(sb);
}
}
别人的:
有人和我一样,也有挺聪明的。
public class Kata {
public static String stringy(int size) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i < size + 1; i++)
sb.append(i & 1);
return sb.toString();
}
}
import java.util.stream.IntStream;
import java.util.stream.Collectors;
public class Kata {
public static String stringy(int size) {
return IntStream.rangeClosed(1, size)
.map(i -> i % 2)
.mapToObj(String::valueOf)
.collect(Collectors.joining(""));
}
}
后记
多思考,总有优化的空间(行数)。
网友评论