原题解来自 https://leetcode-cn.com/problems/count-and-say/solution/jsdi-gui-jie-jue-by-wo-shi-gao-xiao-de/
看了这个哥们的解法,觉得特别好,顺便复习了下正则
var countAndSay = function(n) {
if(n==1){
return n.toString()
}
var tempArr = countAndSay(n-1).match(/(\d)\1*/g) // 该正则进行相同分组,调用match方法得出接下来用的数组
var result = ""
tempArr.forEach((item)=>{ // 循环上面得到的数组,然后取每个的长度(题里说的几个),还有第一个数字(题里说的哪个数)
var lth = item.length.toString()
var num = item.substring(0,1)
result = result+lth+num
})
return result //最后返回结果
};
特别要解释下这个正则
(\d)匹配字符
\1 匹配第一个圆括号内容(同理\2 匹配第二个圆括号内容)
https://www.cnblogs.com/gddcz/p/9131597.html
/g 全局匹配,而不是只返回第一个符合的记录
https://www.cnblogs.com/ldq678/p/9375305.html
举个例子
kk = "111221"
kk.match(/(\d)\1*/g)
["111", "22", "1"]
他会把重复的数字合并为一组,这个正则绝了。。。看评论说这种饶舌题目是出给嘻哈程序员的吗,笑死我了~哈哈