zoukankan      html  css  js  c++  java
  • count and say

    问题描述

    1. leetcode38 报数题,facebook 的面试题,leetcode 上的描述写得并不是很通俗易懂,让人读起来云里雾里。看看别人的题目描述
    2. 意思就是:

        初始值第一行是 1。
        第二行读第一行,读作 1 个 1,去掉个字,写做字符串: “11”。
        第三行读第二行,读作 2 个 1,去掉个字,写做字符串: “21”。
        第四行读第三行,读作 1 个 2,1 个 1,去掉所有个字,写做字符串: “1211”。
        第五行读第四行,读作 1 个 1,1 个 2,2 个 1,去掉所有个字,写作字符串: “ 111221”。
        第六行读第五行,读作 3 个 1,2 个 2,1 个 1,去掉所以个字,写作字符串: “312211”。

        本题目要求输入 1 - 30 的任意行数,输出该行字符串。

    解题思路

    1. 题目意思弄清楚后,这道题就很清晰明了了,第 n 行结果的来源是他前面的字符串,也就是第 n-1 个字符,那么这就可以用佩波拉契数列的动态规划求解思路去计算了。算是最简单的动态规划了。初始状态为 “1”,依次计算下一个,直到第n个。

    Java 解法

     1     public static String countAndSay4(int n) {
     2         String s = "1";
     3         int i=0;
     4         int j;
     5 
     6         for (int k=1; k<n; k++) {
     7             StringBuilder sb = new StringBuilder();
     8             char[] chars = s.toCharArray();
     9             while (i < chars.length) {
    10                 j = i;
    11                 while (j < chars.length && chars[i] == chars[j]) {
    12                     j ++;
    13                 }
    14                 sb.append(j-i).append(chars[i]);
    15                 i = j;
    16             }
    17             s = sb.toString();
    18             i = 0;
    19         }
    20         return s;
    21     }
  • 相关阅读:
    Java精选笔记_JSP技术
    Java精选笔记_JavaBean
    Java精选笔记_JSP开发模型
    Java精选笔记_XML基础
    Git_多人协作
    Git_Feature分支
    Git_Bug分支
    Git_分支管理策略
    Git_解决冲突
    Git_创建与合并分支
  • 原文地址:https://www.cnblogs.com/dogeLife/p/11040270.html
Copyright © 2011-2022 走看看