题意:

image.png
image.png

解题思路:

  1. 思路:
  2. 1. 2-n的顺序生成字符串,每次找连续相同的数字段合并,比如11=》即 “两个 1”,记作 21
  3. 2. 下一个数是对上一个数的描述,比方说4=1211 里有 1 1 ,1 22 1”,那么 111221就是它的下一个数5的结果。

PHP代码实现:

  1. class Solution {
  2. function countAndSay($n) {
  3. $res = "1";
  4. for ($i = 2; $i <= $n; $i ++) {
  5. $repeatCount = 1;
  6. $str = '';
  7. for ($j = 0; $j < strlen($res); $j++) {
  8. if (isset($res[$j + 1]) && $res[$j] == $res[$j + 1]) {
  9. $repeatCount++;
  10. } else {
  11. $str .= $repeatCount. $res[$j];
  12. $repeatCount = 1;
  13. }
  14. }
  15. $res = $str;
  16. }
  17. return $res;
  18. }
  19. }

GO代码实现:

  1. func countAndSay(n int) string {
  2. str := []string{"1"}
  3. tmp := []string{}
  4. l := 0
  5. count := 1
  6. for i := 2; i <= n; i++ {
  7. l = len(str)
  8. for j := 0; j < l; j++ {
  9. if j + 1 < l && str[j + 1] == str[j] {
  10. count++
  11. continue
  12. } else {
  13. tmp = append(tmp, strconv.Itoa(count))
  14. tmp = append(tmp, str[j])
  15. count = 1
  16. }
  17. }
  18. str = tmp
  19. tmp = []string{}
  20. }
  21. return strings.Join(str, "")
  22. }