/**
* @param {number} n
* @return {string}
*/
var countAndSay = function(n) {
var arr=[];
arr[0] = "1";
var count = 1;
var str = arr[0];
for(var i=1;i<n;i++) {
//算出arr[i]
count = 1;
str = arr[i-1]; //为什么直接arr[i-1][]不行?
arr[i]=""; //这句arr[i]是undefined
for(var j=0;j<str.length-1;j++){
if(str[j+1] == str[j]) {
count++;
}else{
arr[i]=arr[i]+count+str[j];
count = 1;
}
}
arr[i] = arr[i]+count+str[str.length-1];
/* while循环写法
var j=0;
while(str[j+1]){
if(str[j+1] == str[j]){
count++;
}else{
arr[i] += count+str[j];
count = 1;
}
j++;
}
arr[i] += count+str[j];
*/
}
return arr[n-1];
};
这道题费时很多
1.首先题意理解就可能有问题。后一个数是通过读前一个数生成的
2.字符串分解成数组。上网查了半天,都是通过特定分隔符分割的。后来发现直接通过string[index]可访问字符串中的字符,问题就简单了很多。
3.以后编程解决问题时要先把框架(伪代码)编出来再去助益翻译成编程语言,有利于理清思路。
4.arr[ ]是字符串数组,令str=arr[x],可访问str[y],但是直接访问arr[x][y]却报错。还是要了解一下基本数据类型的知识。