难度:简单

    描述:
    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
    1. 1
    2. 11
    3. 21
    4. 1211
    5. 111221
    1 被读作 “one 1” (“一个一”) , 即 11。
    11 被读作 “two 1s” (“两个一”), 即 21。
    21 被读作 “one 2”, “one 1” (”一个二” , “一个一”) , 即 1211。
    给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
    注意:整数顺序将表示为一个字符串。

    示例:

    1. 示例 1:
    2. 输入: 1
    3. 输出: "1"
    4. 示例 2:
    5. 输入: 4
    6. 输出: "1211"

    思路分析:
    实现方法一:递归
    观察发现每一个结果与前一个结果相关,利用递归计算前一个值,知道返回1,再利用前一个值计算当前值

    实现方法二:双指针
    第一个指针记录值,第二个指针记录数量,同样利用前一个结果计算当前结果

    代码实现:

    1. var countAndSay = function(n) {
    2. if(n == 1) {
    3. return "1"
    4. } else {
    5. let str = countAndSay(n-1);
    6. let count = 1;
    7. let res = "";
    8. for (let i = 0;i < str.length;i++) {
    9. if (str[i] == str[i+1]) {
    10. count ++
    11. } else {
    12. res = res+count + str[i]
    13. count = 1
    14. }
    15. }
    16. return res
    17. }
    18. };
    19. var countAndSay = function(n) {
    20. let num = "1";
    21. let sum = ""
    22. for(let l=0;l<n-1;l++){
    23. let sum = ""
    24. for(let i =0,j=0;i<num.length;){
    25. if(num[i]==num[i+j]){
    26. j++;
    27. }else{
    28. sum = sum +j+""+num[i];
    29. i += j;
    30. j=1;
    31. }
    32. }
    33. num = sum;
    34. }
    35. return num;
    36. };