这个题就是说,根据其前面的一个字符串来写出当前的字符串,比如第一个是1,第二个就是11,代表第一个有一个一,第三个就是21,代表第二个有两个1,第四个就是1211,代表第三个有一个二有一个一...
这个题要解的话从正解从反解都是可以的,反解的话就是从最后一个一直往前推,像不像是递归?就是递归!
var giveNumber = function(n) {
if (n === 1) return '1';
var preNum = giveNumber(n-1);
return preNum.replace(/(\d)\1*/g, item => `${item.length}${item[0]}`)
};
重点的地方是针对于正则表达式的一个认识,\d代表数字,\1代表其前面的,匹配的是紧挨着的前面的第一个括号内的东西,可以理解为和其相同的东西,后面的*代表0个或者多个,在本题中的意思就是之前的没有和现在相匹配的或者有多个。
同时,字符串可以直接通过[i]取下标