报数的golang实现
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
.
.
.
.
.
- 1 被读作 "one 1" ("一个一") , 即 11。
- 11 被读作 "two 1s" ("两个一"), 即 21。
- 21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
输入:
输出: ""
输入:
输出: ""
理解题意:
首先我们还是列举一下每个数的输出吧
| 第几次 | 输出 |
|---|---|
| 1 | 1 |
| 2 | 11 |
| 3 | 21 |
| 4 | 1211 |
| 5 | 111221 |
| 6 | 312211 |
| 7 | 13112221 |
| 8 | 1113213211 |
| 9 | 31131211131221 |
从上面我们可以看出来,对一个数说出来有两种情况:
- 多个相邻一样:n个几
- 相邻不一样:1个几
那函数中重要的思想就是:
- 遍历上一次的输出
- 然后比较相邻的数
- 如果是一样的话,那就在找下一位
- 如果是不一样的话,那就要添加到数组中
核心代码:
func say(bs []byte) []byte {
result := make([]byte, )
x, y := ,
for x < len(bs) { //取出字节数组中的每一个
//判断相邻位置的是否是一样
//当是一样的话,那就继续,找到有多少个是一样的
//当不是一样的话,那就是一个几
//这里要保证y不能超过bs的长度,不然会panic
for y < len(bs) && bs[x] == bs[y] {
y++
}
//第二个参数是指有多少个一样的
// (这里需要注意一点,一定要加上'0',不然字节不对,'0'代表的字节是48,
// 如果不加上'0',byte(y-x)就是byte(1),这是不对的)
//第三个参数是指说出来的那个数
result = append(result, byte(y-x+''), bs[x])
//跳过相同的数
x = y
}
return result
}
当然我们肯定要一开始就设定第一次的输出为'1'
func countAndSay(n int) string {
if n == {
return ""
}
bs := []byte{''}
for i := ; i <= n; i++ {
bs = say(bs)
}
return string(bs)
}
为什么要用字节数组呢?因为转字符串简单呀!!!
报数的golang实现的更多相关文章
- Golang核心编程
源码地址: https://github.com/mikeygithub/GoCode 第1章 1Golang 的学习方向 Go 语言,我们可以简单的写成 Golang 1.2Golang 的应用领域 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- 说说Golang的使用心得
13年上半年接触了Golang,对Golang十分喜爱.现在是2015年,离春节还有几天,从开始学习到现在的一年半时间里,前前后后也用Golang写了些代码,其中包括业余时间的,也有产品项目中的.一直 ...
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- golang struct扩展函数参数命名警告
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...
- golang语言构造函数
1.构造函数定义 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数 ,可根据其参数个 ...
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- golang的安装
整理了一下,网上关于golang的安装有三种方式(注明一下,我的环境为CentOS-6.x, 64bit) 方式一:yum安装(最简单) rpm -Uvh http://dl.fedoraprojec ...
随机推荐
- JavaWeb学习 (五)————Servlet(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- MySQL 事务机制
事务处理是保证数据安全的重要机制,事务有四个重要属性 ,根据它们的英文名称可以记为ACID: 原子性(Atomic): 事务操作是不可分割的; 事务只存在已执行和未执行两种状态,不存在只执行了部分指令 ...
- Vim 字符串替换命令
命令模式下输入如下命令可实现替换: s/str1/str2/ 替换当前行第一个 str1 为 str2 s/str1/str2/g 替换当前行中所有的 str1 为 str2 m,ns/str1/st ...
- 检测到是移动端还是PC端进入页面,加载不同样式表现
if(/AppleWebKit.*mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alc ...
- 远程登陆Linux服务器
Xshell 强大的ssh客户端,通过互联网到远程主机.下载:http://www.netsarang.com/download/down_form.html?code=622 1.安装完,新建会话 ...
- Java基础——Oracle(一)
Oracle是目前最流行的数据库之一.功能强大,性能卓越.所以学起来比较困难.学习Oracle需要具备一定的基础.比如学习过一门编程语言,或者学过其他的数据库等,没有一些基础很难下手. 一.Oracl ...
- c++类构造函数详解
//一. 构造函数是干什么的 /* 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg: Counter c1; 编译 ...
- jQuery性能优化的一些参考建议
JQ3.1 文档下载地址:https://pan.baidu.com/s/1c2vMQdy 一.注意定义jQuery变量的时候添加var关键字 这个不仅仅是JQ,在JS中都是必须的 二.如果有多个变量 ...
- LintCode Binary Search
For a given sorted array (ascending order) and a target number, find the first index of this number ...