Count and Say
来源:互联网 发布:知乎如何玩 编辑:程序博客网 时间:2024/06/08 00:34
【题目】:
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 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 sequence.
Note: The sequence of integers will be represented as a string.
【题意】:
当n=1时输出字符串1;当n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推,写个countAndSay(n)函数返回字符串。给出一个整数n,然后返回第n个序列,例如整数1返回“1”,读着one1;整数3返回“21”,读着two 1s;那么当取整数6,应该返回“312211”读着三个1,二个2,一个1。取整数7时,返回“13112221”。
【思路】:
分为三种情况:
1:当n<0时返回null.
2: 当n=1时,返回1.
3:当n>1时,假设n-1返回的字符串是s,对s的串进行处理返回此结果。
实现:
public static String countAndSay(int n) { if (n == 0) return null; if (n == 1) return "1";String s = "1";StringBuffer buffer = new StringBuffer();//记录重复的值int count = 0;// 迭代次数int round = 0;int i;while (++round < n) {count = 1;buffer.setLength(0);for (i = 1; i < s.length(); i++) {// 重复的值,继续计数if (s.charAt(i) == s.charAt(i - 1)) { count++;} else { // 有新的值出现,记录到bufferbuffer.append(count).append(s.charAt(i - 1));// 重置countcount = 1; }}buffer.append(count).append(s.charAt(i - 1));// 更新ss = buffer.toString(); }return buffer.toString();}
递归思想:
参考别人:
public class Solution { public String countAndSay(int n) { if(n == 1){ return "1"; } //递归调用,然后对字符串处理 String str = countAndSay(n-1) + "*";//为了str末尾的标记,方便循环读数 char[] c = str.toCharArray(); int count = 1; String s ="" ; for(int i = 0; i < c.length - 1;i++){ if(c[i] == c[i+1]){ count++;//计数增加 }else{ s = s + count + c[i];//上面的*标记这里方便统一处理 count = 1;//初始化 } } return s; }}
- LeetCode: Count and Say
- [LeetCode]Count and Say
- LeetCode Count and Say
- [Leetcode] Count and Say
- Count and Say
- Leetcode: Count and Say
- [LeetCode] Count and Say
- LeetCode Count and Say
- Count and Say
- [38]Count and Say
- Count and Say
- Count and Say
- Count and Say
- [LeetCode]Count and Say
- Count and Say
- Count and Say
- [LeetCode] Count and Say
- LeetCode-Count and Say
- Android获取系统服务getSystemService与getService区别
- scp 跨机远程拷贝
- c++第五次实验——数组分离
- ubuntu12.04下的samba使用方法
- Qt foreach用法
- Count and Say
- linux下安装python、scrapy、redis、mysql
- eclipseEE 配置android 环境
- iOS quartzCore第七章—— CAScrollLayer的运用
- ORA-28040: No matching authentication protocol exception
- Activity是如何接收到touch事件的(窗口与用户输入系统)
- wget 文件下载
- Region区域
- lucene多线程并发的问题