LeetCode

LeetCode

  • Problems
  • GitHub

›Problems

Problems

  • Two Sum
  • Add Two Numbers
  • Longest Substring Without Repeating Characters
  • Median of Two Sorted Arrays
  • Longest Palindromic Substring
  • ZigZag Conversion
  • Reverse Integer
  • String to Integer (atoi)
  • Palindrome Number
  • Regular Expression Matching
  • Container With Most Water
  • Integer to Roman
  • Roman to Integer
  • Longest Common Prefix
  • 3Sum
  • 3Sum Closest
  • Letter Combinations of a Phone Number
  • 4Sum
  • Remove Nth Node From End of List
  • Valid Parentheses
  • Merge Two Sorted Lists
  • Generate Parentheses
  • Merge k Sorted Lists
  • Swap Nodes in Pairs
  • Reverse Nodes in k-Group
  • Remove Duplicates from Sorted Array
  • Remove Element
  • Implement strStr()
  • Divide Two Integers
  • Substring with Concatenation of All Words
  • Next Permutation
  • Longest Valid Parentheses
  • Search in Rotated Sorted Array
  • Find First and Last Position of Element in Sorted Array
  • Search Insert Position
  • Valid Sudoku
  • Sudoku Solver
  • Count and Say
  • Combination Sum
  • Combination Sum II
  • First Missing Positive
  • Trapping Rain Water
  • Multiply Strings
  • Wildcard Matching
  • Jump Game II
  • Permutations
  • Permutations II
  • Rotate Image
  • Group Anagrams
  • Pow(x, n)
  • Binary Tree Inorder Traversal
  • Triangle
  • Number of Islands
  • Random Pick Index
  • Coin Change 2
  • Maximum Length of Pair Chain
  • Repeated String Match
  • Minimum ASCII Delete Sum for Two Strings
  • Remove Comments
  • Split Linked List in Parts
  • Design HashSet
  • RLE Iterator
  • Number of Recent Calls
  • Rotting Oranges
  • Minimum Number of K Consecutive Bit Flips
  • Remove All Adjacent Duplicates In String
  • Unique Number of Occurrences
  • Count Servers that Communicate
  • Subtract the Product and Sum of Digits of an Integer
  • Find the Smallest Divisor Given a Threshold
  • Find N Unique Integers Sum up to Zero
  • Minimum Flips to Make a OR b Equal to c
  • Combine Two Tables
  • Second Highest Salary
  • Nth Highest Salary
  • Rank Scores
  • Consecutive Numbers
  • Employees Earning More Than Their Managers
  • Duplicate Emails
  • Customers Who Never Order
  • Department Highest Salary
  • Department Top Three Salaries
  • Delete Duplicate Emails
  • Rising Temperature
  • Trips and Users
  • Big Countries
  • Classes More Than 5 Students
  • Valid Phone Numbers
  • Tenth Line
  • Print in Order
  • Maximum Subarray

Count and Say

Description

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 where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence. You can do so recursively, in other words from the previous member read off the digits, counting the number of digits in groups of the same digit.

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

 

Example 1:

Input: 1
Output: "1"
Explanation: This is the base case.

Example 2:

Input: 4
Output: "1211"
Explanation: For n = 3 the term was "21" in which we have two groups "2" and "1", "2" can be read as "12" which means frequency = 1 and value = 2, the same way "1" is read as "11", so the answer is the concatenation of "12" and "11" which is "1211".

Solution(javascript)

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
    function next(si, n){
        if(n === 1) {
            return si;
        }
        
        let so = '';
        let ar = [];
        let id = 0;
        let mp = new Map();
        let lc = '0';
        
        for(let i = 0; i < si.length; i++){
            const ch = si.charAt(i);
            if(ch != lc){
                ar.push(id);
                mp.set(id, new Map([[ch, {val: 1}]]));
                id += 1;
            } else {
                mp.get(id-1).get(ch).val++;
            }
            lc = ch;
        }
        
        for(let i = 0; i < ar.length; i++){
            mp.get(ar[i]).forEach(function(v, k){
                so += (v.val + k);
            });
        }
        
        return next(so, n-1);    
    }
    return next('1', n);
};
← Sudoku SolverCombination Sum →
  • Description
  • Solution(javascript)
Powered By LeetCode Site Generator