zoukankan      html  css  js  c++  java
  • [LeetCode] 38. Count and Say 计数和读法

    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"
    

    Input Constraints:

    1 <= n <= 30

    对于前一个数,每一段相同元素的子数列数出相同元素的个数,然后这个子数组变为个数+数字,重复到结束。

    解法: 迭代Iteration

    Java:

    public String countAndSay(int n) {
    	if (n <= 0)
    		return null;
     
    	String result = "1";
    	int i = 1;
     
    	while (i < n) {
    		StringBuilder sb = new StringBuilder();
    		int count = 1;
    		for (int j = 1; j < result.length(); j++) {
    			if (result.charAt(j) == result.charAt(j - 1)) {
    				count++;
    			} else {
    				sb.append(count);
    				sb.append(result.charAt(j - 1));
    				count = 1;
    			}
    		}
     
    		sb.append(count);
    		sb.append(result.charAt(result.length() - 1));
    		result = sb.toString();
    		i++;
    	}
     
    	return result;
    } 

    Java:

    public class Solution {
        public String countAndSay(int n) {
    	    	StringBuilder curr=new StringBuilder("1");
    	    	StringBuilder prev;
    	    	int count;
    	    	char say;
    	        for (int i=1;i<n;i++){
    	        	prev=curr;
    	 	        curr=new StringBuilder();       
    	 	        count=1;
    	 	        say=prev.charAt(0);
    	 	        
    	 	        for (int j=1,len=prev.length();j<len;j++){
    	 	        	if (prev.charAt(j)!=say){
    	 	        		curr.append(count).append(say);
    	 	        		count=1;
    	 	        		say=prev.charAt(j);
    	 	        	}
    	 	        	else count++;
    	 	        }
    	 	        curr.append(count).append(say);
    	        }	       	        
    	        return curr.toString();
            
        }
    }
    

    Python:

    class Solution:
        # @return a string
        def countAndSay(self, n):
            seq = "1"
            for i in xrange(n - 1):
                seq = self.getNext(seq)
            return seq
    
        def getNext(self, seq):
            i, next_seq = 0, ""
            while i < len(seq):
                cnt = 1
                while i < len(seq) - 1 and seq[i] == seq[i + 1]:
                    cnt += 1
                    i += 1
                next_seq += str(cnt) + seq[i]
                i += 1
            return next_seq
    

    Python: wo

    class Solution(object):
        def countAndSay(self, n):
            """
            :type n: int
            :rtype: str
            """
            s = '1'
            i = 1
            while i < n:
                count = 1
                curr = s[0]
                news = ''
                for j in xrange(1, len(s)):
                    if curr == s[j]:
                        count += 1
                    else:
                        news += str(count) + s[j-1]
                        curr = s[j]
                        count = 1
                news += str(count) + s[-1]        
                s = news    
                i += 1    
                    
            return s    

    C++:

    class Solution {
    public:
        string countAndSay(int n) {
            if (n <= 0) return "";
            string res = "1";
            while (--n) {
                string cur = "";
                for (int i = 0; i < res.size(); ++i) {
                    int cnt = 1;
                    while (i + 1 < res.size() && res[i] == res[i + 1]) {
                        ++cnt;
                        ++i;
                    }
                    cur += to_string(cnt) + res[i];
                }
                res = cur;
            }
            return res;
        }
    };
    

      

      

      

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    Nginx 对访问量的控制
    Shell入门
    小程序如何处理键盘覆盖输入框
    移动端适配之二:visual viewport、layout viewport和ideal viewport介绍
    javascript-对象
    bind函数作用、应用场景以及模拟实现
    「面试题」如何实现一个圣杯布局?
    一款轮播组件的诞生
    超火js库: Lodash API例子
    js 中的 number 为何很怪异
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9625347.html
Copyright © 2011-2022 走看看