通过万岁!!!
- 题目:就是给你一个数n,然后让你构建一个长度为n的字符串,并且计算其中1的个数,这个字符串只有1和2组成。构建规则是遍历自己,如果遇到1,那么就对自己加一个值,如果遇到2,就对自己加两个值,而具体加的值是如果之前加的字符是1,那么本次加字符是2,否则本次加的字符是1。
- 思路:其实,其实我上面讲述这个题的时候,就已经说了大致的思路,原题中给的比较绕。这里需要注意初始化,如果我们只对s初始化为1或者12是不够的,所以要初始化为122。
- 技巧:字符串构建、遍历
java代码
class Solution {
public int magicalString(int n) {
StringBuilder sb = new StringBuilder();
sb.append(122);
int ans = 1;
int i = 2;
boolean isOne = true;// 加的是不是1
while (sb.length() < n) {
if (sb.charAt(i) == '1') {// i指向的是1,
if (isOne) {// 需要加1
sb.append(1);
ans++;
} else {
sb.append(2);
}
} else {// i指向的2
if (isOne) {
sb.append(1);// 追加第一个1
ans++;
if (sb.length() >= n) {
break;
}
sb.append(1);// 追加第二个1
ans++;
} else {
sb.append(2);
if (sb.length() >= n) {
break;
}
sb.append(2);
}
}
isOne = !isOne;
i++;
}
return ans;
}
}
- 总结:题目还是有点绕的,而且我用的if判断较多,感觉应该是一个比较笨的方法了。通过万岁了。