• Count and Say,统计并输出,利用递归,和斐波那契数列原理一样。


    问题描述:n=1,返回“1”;n=2,返回“11”;n=3,返回“21”;n=4,返回1211,。。。。

    算法分析:和斐波那契数列道理差不多,都是后一个要依赖前一个元素。因此可以使用递归,也可以使用迭代。

    递归算法:

     1 public String countAndSay(int n)
     2     {
     3         StringBuffer sb = new StringBuffer();
     4         if(n <= 0)
     5             return null;
     6         
     7         if(n == 1)
     8         {
     9             return "1";
    10         }
    11         
    12         if(n >= 2)
    13         {
    14             String s = countAndSay(n-1);
    15             int count = 1;
    16             for(int i = 1; i < s.length(); i ++)
    17             {
    18                 if(s.charAt(i) == s.charAt(i-1))
    19                 {
    20                     count ++;
    21                 }
    22                 else
    23                 {
    24                     sb.append(count);
    25                     sb.append(s.charAt(i-1));
    26                     count = 1;
    27                 }
    28             }
    29             sb.append(count);
    30             sb.append(s.charAt(s.length()-1));
    31         }
    32         return sb.toString();
    33     }

    迭代算法:

     1 public String countAndSay(int n)
     2     {
     3         
     4         if(n <= 0)
     5         {
     6             return null;
     7         }
     8         String result = "1";
     9         for(int i = 1; i < n; i ++)
    10         {
    11             StringBuffer sb = new StringBuffer();
    12             int count = 1;
    13             for(int j = 1; j < result.length(); j ++)
    14             {
    15                 if(result.charAt(j) == result.charAt(j - 1))
    16                 {
    17                     count ++;
    18                 }
    19                 else
    20                 {
    21                     sb.append(count);
    22                     sb.append(result.charAt(j-1));
    23                     count = 1;
    24                 }
    25             }
    26             sb.append(count);
    27             sb.append(result.charAt(result.length()-1));
    28             result = sb.toString();
    29         }
    30         return result;
    31     }
  • 相关阅读:
    MySql索引
    HashMap 底层解析
    https超文本安全传输协议
    多线程
    过滤器和拦截器
    计算机操作系统
    计算机网络
    java线程内存模型JMM
    jvm
    数据库
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5584285.html
Copyright © 2020-2023  润新知