leetcode 38
今天的题总体来说还是可以的,也不是谈的算难,是一道中等题,思路是有的,遍历生成就行,看来双指针还是没学好,就是没能实现出来(很气
附上官方代码~哭了
class Solution {
public String countAndSay(int n) {
String str = "1";
for(int i = 2; i <= n; i++){
StringBuilder sb = new StringBuilder();
//开始遍历的初始位置
int start = 0;
//指针移动
int pos = 0;
while(pos < str.length()){
while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
pos++;
}
sb.append(Integer.toString(pos-start)).append(str.charAt(start));
start = pos;
}
str = sb.toString();
}
return str;
}
}
大致讲下思路吧:既然题目说是根据上一层来写的,那我们可以根据递归,也可以迭代,这里我的想法就是迭代(绝对不是我不会递归。
首先如果是n=1,就直接返回1即可
然后n=2的话,开始遍历循环,首先要pos开始遍历,如果当前字符跟起始字符相同,就相加,直至不相等就推出当前循环,然后sb就添加个数和数字,然后附给str,然后遍历,可能说的有点抽象,但这是双指针的常见操作,不懂的话可以试着自己一步步调试,就会恍然大悟。

浙公网安备 33010602011771号