The count-and-say sequence is the sequence of integers with the first five terms as following:
1 2 3 4 5
|
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 where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
class { public String countAndSay(int n) { assert n > 0; StringBuilder currSeq = new StringBuilder("1"); for (int i = 1; i < n; i++) { currSeq = getNextSeq(currSeq); } return currSeq.toString(); }
private static StringBuilder getNextSeq(StringBuilder seq) { StringBuilder nextSeq = new StringBuilder(); int cnt = 1; for (int i = 0; i < seq.length(); i++) { if (i + 1 < seq.length() && seq.charAt(i) == seq.charAt(i + 1)) { cnt++; } else { nextSeq.append(cnt).append(seq.charAt(i)); cnt = 1; } } return nextSeq; } }
|
近期评论