如题
看上去先用递归来写写
public static String countAndSay(int n) {
if (n==1){
return "1";
}
StringBuilder rel =new StringBuilder(countAndSay(n-1));//递归获取
StringBuilder re =new StringBuilder();
int count =1;
for (int i=1;i<rel.length();i++){
if(rel.charAt(i)==rel.charAt(i-1)){//与前一个字符相同
count++;
}else{
re.append(count);//还原计数
re.append(rel.charAt(i-1));
count=1;
}
}
re.append(count);
re.append(rel.charAt(rel.length()-1));
return re.toString();
}
结果
递归都转化为循环
public static String countAndSay1(int n) {
StringBuilder re =new StringBuilder("1");
while(n>1){
n--;
StringBuilder rel =new StringBuilder();
int count =1;
for (int i=1;i<re.length();i++){
if(re.charAt(i)==re.charAt(i-1)){
count++;
}else{
rel.append(count);
rel.append(re.charAt(i-1));
count=1;
}
}
rel.append(count);
rel.append(re.charAt(re.length()-1));
re=rel;
}
return re.toString();
}
结果
效率不太行啊,后面看看怎么能压一压时间