Leetcode(38)-报数
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
自己的思路:一开始看到这个题目,想着要把这个序列弄出来,然后根据输入的位数,输出相应位置的数字就好。而且还要计算每个数字中各位数字的个数,如果用int存储,肯定是极为不便的,势必要用string型来存储。那么是转为string型呢,还是一开始就直接用string型呢。肯定是后者要方便很多。
void helper(vector<string> &nums,int n)
{
string x="1";
nums.push_back(x);
nums.push_back("11");
for(int k=2;k<n;k++)
{
int count =1;
string str;
for(int i=1;i<nums[k-1].size();i++)
{
if(nums[k-1][i]==nums[k-1][i-1])
{
count++;
}
else
{
str=str+(char)(count+'0')+nums[k-1][i-1];
count =1;
}
if(i==nums[k-1].size()-1)
{
str+=(count+'0');
str+=nums[k-1][i];
}
}
nums.push_back(str);
}
}
string countAndSay(int n)
{
helper(nums,n);
return nums[n-1];
}
我这里首先将前两个提前输入进去,而且利用了一个额外的函数,将这个序列的前n个数先搞出来,在上层函数直接按位置去取。
虽然思路还算过关,但实现方式过于繁琐了,所以就参考了大神的实现方式:
string countAndSay(int n)
{
if(n==0) return "";
if(n==1) return "1";
string str = "11";
for(int i=2;i < n;i++)
{
int count = 1;
string temp ;
for(int j=1; j <str.length();j++)
{
if(str[j]==str[j-1])
count++;
else
{
temp+=('0'+count);
temp+=str[j-1];
count=1;
}
if(j==str.length()-1)
{
temp+=(count+'0');
temp+=str[j];
}
}
str = temp;
}
return str;
}
思路和我类似,但他并没有把所有序列都得到,他只是去找目标位置的数字,这个是符合题意的,但是因为避免下面的访问越界,仍然要把前两个值提前固定。(暂时没想到其他的办法)
Leetcode(38)-报数的更多相关文章
- [leetcode] 38. 报数(Java)(字符串处理)
38. 报数 水题 class Solution { public String next(String num) { String ans = ""; int i = 0; wh ...
- Leetcode 38.报数 By Python
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ...
- LeetCode 38.报数(Python3)
题目: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1& ...
- C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
目录 前言 题目描述 相关话题 相似题目 解题思路: 运行结果: 代码要点: 参考资料: 文末彩蛋 前言 前文传送门: C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工具简介 上篇文章 ...
- Leetcode题库——38.报数
@author: ZZQ @software: PyCharm @file: countAndSay.py @time: 2018/11/9 14:07 说明:报数序列是一个整数序列,按照其中的整数的 ...
- 【leetcode算法-简单】38. 报数
[题目描述] 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 12. 113. 214. 12115. 1112211 被读作 "one 1&qu ...
- 【LeetCode 38】报数
题目链接 [题解] 模拟题 [代码] class Solution { public: string inttostr(int x){ string temp=""; while ...
- [LeetCode] 38. Count and Say 计数和读法
The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 ...
- Java实现 LeetCode 38 外观数列
38. 外观数列 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述.前五项如下: 1 11 21 1211 111221 1 被读作 "one 1" ...
- LeetCode - 38. Count and Say
38. Count and Say Problem's Link ------------------------------------------------------------------- ...
随机推荐
- 浅谈JavaScript代码性能优化
可以通过https://jsbench.me/测试网站完成性能测试. 一.慎用全局变量 1.全局变量定义在全局执行上下文,是所有作用域链的顶端,在局部作用域中没找到的变量都会到全局变量中去查找,所以说 ...
- 关于安装版JDK1.8 1.7更改多个JDK环境变量 不生效
配置maven(apache-maven-3.3.9)时提示异常:'mvn' 不是内部或外部命令,上网查找得知 它不支持jdk1.8,所以重新安装jdk1.7,后来就出现下面的问题 现象: 当使用安装 ...
- H3C、Huawei、Cisco网络设备AAA TACACS认证配置
TACACS技术白皮书 摘要:TACACS是实现AAA功能的一种安全协议,主要是通过TACACS客户端与TACACS服务器通信来实现多种用户的AAA功能. HWTACACS采用TCP协议承载报文,TC ...
- IDEA 2019 Unable to get current time from Google's servers 解决
取消android support即可
- java 静态资源,非静态资源,父类子类,构造方法之间的初始化循序
java面试经常被问静态资源,非静态资源,父类子类,构造方法之间的执行顺序.下面添加两个类做个测试 class Parent { // 静态变量 public static String p_Stat ...
- Java——Number类
在平时学习中,当我们需要使用数字的时候,通常使用内置数据类型,如byte,int,long,double等. int i =12; float a = 12.3; 在实际开发中,经常会遇到需要使用对象 ...
- 关于项目中Spring版本与jdk1.8兼容问题解决
问题描述: 在用公司的工具搭建项目时,由于使用Spring框架,同时要求jdk版本为1.8:当部署完成以后,项目总是无法运行,会报错: Context namespace element 'annot ...
- Jenkins (1、自动化发布war包、2、自动化发布nodejs)
1.持续集成javaweb 首先咱们需要安装一个 Jenkins,这个就不必多说了,晚上一搜索一大把,然后安装各种插件,配置各种环境变量, 今天我的实验环境是 使用Jenkins 拉取gitlap上项 ...
- 算法-迪杰斯特拉算法(dijkstra)-最短路径
迪杰斯特拉算法(dijkstra)-最短路径 简介: 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中 ...
- 线程不安全(Arraylist,HashSet,HashMap)和写时复制
package com.yangyuanyuan.juc1205; import java.util.List; import java.util.Map; import java.util.Set; ...