这是之前应聘某公司时遇到的一道算法题:当时思路是有的,步骤大概写出来了,但忽略了一些细节,导致没有完全做对;后来深入想了一下,进行了补全,题目和代码如下。
有一列数列,1,11,21,1211,111221,…,第二项表示第一项有1个1,所以第二项为11;第三项表示第二项有2个1,所以第三项为21;第四项表示第三项有1个2,1个1,所以第四项为1211;… 以此类推,求第n项数列值为多少。
//这里使用字符串表示数列项
public StringBuilder method(int n) {
StringBuilder str = new StringBuilder();
if (n == 0) {
str.append("1");
return str;
} else {
//使用的是递归的思想,依次往前推
StringBuilder s = method(n - 1);
for (int i = 0; i < s.length(); i++) {
int count = 1;
int j = 0;
for (j = i + 1; j < s.length(); j++) {
if (s.charAt(i) == s.charAt(j)) {
i = j;
count++;
}
if (s.charAt(i) != s.charAt(j)) {
break;
}
}
str.append(count);
str.append(s.charAt(i));
if (j == s.length()) {
break;
}
}
return str;
}