天天看點

LeetCode之Count and Say

1、題目

The count-and-say sequence is the sequence of integers with the first five terms as following:

1.     1
2.     11
3.     21
4.     1211
5.     111221      

1 is read off as "one 1" or 11.

11 is read off as "two 1s" or 21.

21 is read off as "one 2, then one 1" or 1211.

Given an integer n, generate the nth term of the count-and-say sequence.

Note: Each term of the sequence of integers will be represented as a string.

Example 1:

Input: 1
Output: "1"      

Example 2:

Input: 4
Output: "1211"
Exapmle
  // 1 1
  // 2 11
  // 3 21
  // 4 1211
  // 5 111221
    // 6 312211
  // 7 13112221      

2、代碼實作

public class Solution {
    public String returnLast(String s) {
  if (s == null || s.length() == 0)
    return null;
  String result = "";
  int length = s.length();
  if (length == 1) {
    return "1" + s;
  }
  int count = 1;
  int init = s.charAt(0);
  for (int i = 1; i < s.length(); i++) {
    if (s.charAt(i) == s.charAt(i - 1)) {
    count++;
    if (i == length - 1) {
        char ss = s.charAt(i - 1);
        result = result + count + s.charAt(i - 1);
    }
    } else {
    char ss = s.charAt(i - 1);
    result = result + count + s.charAt(i - 1);
    count = 1;
    if (i == length - 1) {
        result += ("1" + s.charAt(i));
    }
    }
  }
  return result;
    }
    public String countAndSay(int n) {
        if (n <= 0)
      return null;
        if (n == 1) 
      return "1";
        else {
      return returnLast(countAndSay(n - 1));
        }
    }
}      

3、總結

1、用遞歸方法

2、我們遞歸的時候,先實作預設包含字元串,如何得到下一個字元串,這也是我們需要把每次得到的結果遞歸,是以,我們先寫個函數簡單實作從這個字元串如果得到下一個字元串

3、我們在寫遞歸公共函數的實作時候,要注意,末尾和數字前一位是否相同和不同的情況。

481

繼續閱讀