481. 神奇字符串
解题过程
INFO
题目链接 神奇字符串 s 仅由 '1' 和 '2' 组成,并需要遵守下面的规则: 神奇字符串 s 的神奇之处在于,串联字符串中 '1' 和 '2' 的连续出现次数可以生成该字符串。 s 的前几个元素是 s = "1221121221221121122……" 。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 "1 22 11 2 1 22 1 22 11 2 11 22 ......" 。每组中 1 或者 2 的出现次数分别是 "1 2 2 1 1 2 1 2 2 1 2 2 ......" 。上面的出现次数正是 s 自身。 给你一个整数 n ,返回在神奇字符串 s 的前 n 个数字中 1 的数目
javascript
/**
* @link https://leetcode.cn/problems/magical-string/
* @title 481. 神奇字符串
* @description 神奇字符串 s 仅由 '1' 和 '2' 组成,并需要遵守下面的规则:
神奇字符串 s 的神奇之处在于,串联字符串中 '1' 和 '2' 的连续出现次数可以生成该字符串。
s 的前几个元素是 s = "1221121221221121122……" 。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 "1 22 11 2 1 22 1 22 11 2 11 22 ......" 。每组中 1 或者 2 的出现次数分别是 "1 2 2 1 1 2 1 2 2 1 2 2 ......" 。上面的出现次数正是 s 自身。
给你一个整数 n ,返回在神奇字符串 s 的前 n 个数字中 1 的数目
* @param {number} n
* @return {number}
*/
// 解法一
// 思路:通过写出n个字符串然后匹配1即可,难点在于构造字符串 1 和 2 的规律,根据题意可知,前缀为 122,开始,下一项为前一项字符相对个数统计
// 注意:需要将 1 和 2 作为一组进行统计,然后结尾需要去除对应多余的字符
var magicalString = function (n) {
if (n <= 3) {
return 1
}
let str = '122'
const num0 = '0'.charCodeAt()
let index = 2
while (str.length < n) {
str += '1'.repeat(str[index++].charCodeAt() - num0)
str += '2'.repeat(str[index++].charCodeAt() - num0)
}
return str.substring(0, n).match(/1/g).length
};
// const result = magicalString(6) // 3
// const result = magicalString(1) // 1
// const result = magicalString(14) // 7
// const result = magicalString(12) // 6 122112122122
const result = magicalString(4) // 2
console.log(result)
解题感受
这一题题意理解成本相对比较高,一开始以为是固定规律遍历的,然后测试用例不通过,才知道是除前三项外后面添加的字符是根据前面已经生成的组字符次数顺序添加的,有一定的规律,然后简单的通过遍历将 1 和 2 作为一组添加顺序(这样不用计算下一组添加的字符是 1 还是 2),但是最后需要截取对应长度的字符串字符,应为将 1 和2 作为一组添加会添加多余的字符导致计算错误 看了题解双指针的做法是相对比较贴近题意的解题思路的,看来后续需要加强针对双指针的训练和理论知识的掌握
优质题解
- https://leetcode.cn/problems/magical-string/solution/shen-qi-zi-fu-chuan-by-leetcode-solution-y5dg/
- https://leetcode.cn/problems/magical-string/solution/by-endlesscheng-z8o1/
- https://leetcode.cn/problems/magical-string/solution/by-ac_oier-7wjo/
- https://leetcode.cn/problems/magical-string/solution/zhua-wa-mou-si-tu-jie-leetcode-by-muse-7-i2z6/
- https://leetcode.cn/problems/magical-string/solution/shen-qi-zi-fu-chuan-shi-zhen-de-shen-qi-jhtru/