The count-and-say sequence is a sequence of digit strings defined by the recursive formula:
countAndSay(1) = "1"
countAndSay(n)
is the way you would "say" the digit string fromcountAndSay(n-1)
, which is then converted into a different digit string.
To determine how you "say" a digit string, split it into the minimal number of groups so that each group is a contiguous section all of the same character. Then for each group, say the number of characters, then say the character. To convert the saying into a digit string, replace the counts with a number and concatenate every saying.
For example, the saying and conversion for digit string "3322251"
:

Given a positive integer n
, return the nth
term of the count-and-say sequence.
Example 1:
Input: n = 1 Output: "1" Explanation: This is the base case.
Example 2:
Input: n = 4 Output: "1211" Explanation: countAndSay(1) = "1" countAndSay(2) = say "1" = one 1 = "11" countAndSay(3) = say "11" = two 1's = "21" countAndSay(4) = say "21" = one 2 + one 1 = "12" + "11" = "1211"
NOTE:
1 <= n <= 30
This problem is popular in LeetCode and GeeksForGeeks A collection of hundreds of interview questions and solutions are available in our blog at Interview Question Solutions
Solution:
Source: Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* To change this license header, choose License Headers in Project Properties. | |
* To change this template file, choose Tools | Templates | |
* and open the template in the editor. | |
*/ | |
package com.alg.ccup; | |
/** | |
* | |
* The count-and-say sequence is the sequence of integers beginning as follows: | |
* 1, 11, 21, 1211, 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 | |
* sequence. | |
* | |
* Note: The sequence of integers will be represented as a string. | |
* | |
* Base case: n = 0 print "1" for n = 1, look at previous string and write | |
* number of times a digit is seen and the digit itself. In this case, digit 1 | |
* is seen 1 time in a row... so print "1 1" for n = 2, digit 1 is seen two | |
* times in a row, so print "2 1" for n = 3, digit 2 is seen 1 time and then | |
* digit 1 is seen 1 so print "1 2 1 1" for n = 4 you will print "1 1 1 2 2 1" | |
* | |
* | |
* @author rbaral | |
*/ | |
public class CountAndSay { | |
public static String countAndSay(int n) { | |
String resultString = "1"; | |
//base case | |
if (n <= 1) { | |
return "1"; | |
} else { | |
int count = 1; | |
for (int i = 1; i < n; i++) { | |
StringBuilder lastString = new StringBuilder(); | |
for (int j = 1; j < resultString.length(); j++) { | |
if (resultString.charAt(j) == resultString.charAt(j - 1)) {// a repeat character | |
count++; | |
} else {//new character | |
lastString.append(count); | |
lastString.append(resultString.charAt(j - 1)); | |
count = 1; | |
} | |
} | |
lastString.append(count); | |
lastString.append(resultString.charAt(resultString.length() - 1)); | |
resultString = lastString.toString(); | |
count = 1; | |
} | |
} | |
return resultString; | |
} | |
public static void main(String args[]) { | |
System.out.println(countAndSay(6)); | |
} | |
} |
No comments:
Post a Comment