2 Star 0 Fork 0

Mr.Z / bigsai-algorithm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
LeetCode 38外观数列.md 2.06 KB
一键复制 编辑 原始数据 按行查看 历史
张赛 提交于 2020-11-26 10:08 . update

LeetCode 38外观数列

image-20201117222234551

分析: 水题,我们只需要模拟流程即可,这个流程也很简单,每次直接从前往后枚举即可,枚举的每个小间断寻找一个元素,知道元素内容和个数之后添加到新串后面即可。

对于实现的代码,别用String就行,这里先用了StringBuilder:

public String countAndSay(int n) {
    if(n==1)return "1";
	StringBuilder sBuilder=new StringBuilder("1");
	while (--n>0) {
		StringBuilder s2=new StringBuilder();
		int index=1;
		int i=0;
		for(i=0;i<sBuilder.length()-1;i++)
		{
			if(sBuilder.charAt(i)==sBuilder.charAt(i+1))
				index++;
			else {
				s2.append(index).append(sBuilder.charAt(i));
				index=1;
			}
		}
		s2.append(index).append(sBuilder.charAt(i));
		//System.out.println(sBuilder.toString()+" "+i);
		sBuilder=s2;    
	}
	
	return sBuilder.toString();
   }

效果的话一般般3ms 在这里插入图片描述 使用数组存储直接操作会更快一些:

public  String countAndSay(int n) {
		if(n==1)return "1";
		int a[]=new int[5000];
		a[0]=1;
		int b[]=new int[5000];
		int len=1;
		int index=0;
		while (--n>0) {
			int num=1;
			int i=0;
			for(i=0;i<len-1;i++)
			{
				if(a[i]==a[i+1])
					num++;
				else {
					b[index++]=num;
					b[index++]=a[i];
					num=1;
				}
			}
			b[index++]=num;
			b[index++]=a[i];
			//交换
			int team[]=a;
			a=b;
			b=team;
			len=index;
			index=0;
		}
		StringBuilder sBuilder=new StringBuilder("");
		for(int j=0;j<len;j++)
		{
			sBuilder.append(a[j]);
		}
		return sBuilder.toString();
   }

在这里插入图片描述

Java
1
https://gitee.com/sillycoder/bigsai-algorithm.git
git@gitee.com:sillycoder/bigsai-algorithm.git
sillycoder
bigsai-algorithm
bigsai-algorithm
master

搜索帮助