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     }
  • 相关阅读:
    原生js,实现跨越的jsonp
    nodejs+express+jade安装步骤
    浏览器端创建可下载文件
    保留有效数字
    日期转换格式
    js添加千分位
    vue 中的 全选和 反选
    防止域名被恶意解析
    node命令行工具之实现项目工程自动初始化的标准流程
    React router动态加载组件-适配器模式的应用
  • 原文地址:https://www.cnblogs.com/dogeLife/p/11040270.html
Copyright © 2011-2022 走看看