ARTS Week 7
Dec 9, 2019 ~ Dec 15, 2019
Algorithm
Problem 38.Count And Say 外观数列 题目链接
题目描述: 外观数列 是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前六项及其说明如下:
1. 1 // base
2. 11 // 描述[1]:1个1 -> 11
3. 21 // 描述[2]:2个1 -> 21
4. 1211 // 描述[3]:1个2,1个1 -> 1211
5. 111221 // 描述[4]:1个1,1个2,2个1 -> 111221
6. 312211 // 描述[5]:3个1,2个2,1个1 -> 312211
解题思路:1是一个初始情况,需要单独处理。对字符串进行遍历,先获得字符串中的开头的数字,然后判断下一个数字是否与前面数字相同,若相同,则计数加一。若不相同,则通过 res = res + str(num) + tmp 语句更新结果,同时将数字替换为当前的数字
通过的代码如下:
class Solution:
def countAndSay(self, n: int) -> str:
def read(string: str) -> str:
tmp = ''
num = 0
res = ''
for i in range(0, len(string)):
if string[i] == tmp:
num += 1
else:
if i != 0:
res = res + str(num) + tmp
tmp = string[i]
num = 1
res = res + str(num) + tmp
return res
res = '1'
for i in range(n-1):
res = read(res)
return res
Review
接下来的几周,我准备简单 Review 每个程序员需要知道的97件事(英文名:97 Things Every Programmer Should Know)。原文链接。初步计划为每周5个小内容。下面是本周的5个小内容:
- 谨慎行动(Act with Prudence) 原文链接
无论计划表看起来时间多么充裕,但总是无法避免遇到问题。当你在“尽快地做”和“做正确的事”之间选择“尽快地做”时,它可能会为以后带来隐患,一般称其为技术债务。技术债务和贷款一样,虽然你可以从短期受益,但利息需要尽快还清。利息包括潜在的bug,不完整的测试案例,等等。如果不及时偿还利息,那么问题将会越来越多,随着问题的增多,想要修正某一问题将会变得困难,就好比利滚利一样,最后无力偿还只能宣布破产(软件的生命结束)。
避免出现上述情况的办法就是尽快处理问题,避免问题的积累。当然,更好的办法便是谨慎行动,减少可能会带来的问题。 - 使用函数式编程原则(Apply Functional Programming Principles) 原文链接
函数时编程有利于提高代码的质量,因为只要函数一旦确定,那么每一个输入的情况,其输出结果是可以预测的。函数的功能越单一,可以减少依赖,同时方便进行测试和改进。函数式编程的一大优点便是避免了面向对象中那复杂的依赖关系,以及成员之间可能会发生的变化。
当然,面向对象也有其相应的优点,比如面向对象可以有效处理业务规则的复杂性。函数式编程与面向对象编程就好比同一事物的阴阳两面。 - 多试着问一问自己“用户会怎么做” (Ask "What Would the User Do?" (You Are not the User)) 原文链接
我们总是错误地认为他人遇到问题的思考方式、思考过程会和自己一样。但事实上并非如此,每个人的差异巨大,当遇到问题时的处理方式也千差万别。因此,为了保证软件对用户的可用性,我们需要从用户的角度来思考,想清楚他们需要什么,但把自己想象成用户并不容易,更好的方式去问用户,了解其内心的想法。不幸的是,很多的用户的表达能力不是很好,他们很难用准确的语言来描述他们需要什么,因此需要一定的沟通技巧来引导用户,或者观察用户的行为以推测他们的需求。 - 利用自动化工具检查编码标准(Automate Your Coding Standard)原文链接
为整个项目/团队设置统一的编码标准有利于管理。这些编码标准包括缩进、变量/函数等的命名以及其他。为了能有效地控制编码标准,需要利用一些自动化工具,可以进行监测,发现不符合规范的代码,甚至可以给出修改建议等 - 简单便是美(Beauty Is in Simplicity) 原文链接
我们在代码中经常有对可读性、可维护性、可开发速度以及追求美的需求。那么什么样的代码是美的呢,柏拉图曾说过美源自简约。在简单代码中,每个单独的模块保持简单,并承担简单的任务,系统各个模块联系也同样简单。代码的可读性、可维护性比较高,同时再开发增加新的模块时也比较容易。
Tips
gcc编译多线程的程序需要增加 -lpthread 选项 或者 -pthread 选项。
Sharing
在 Review 部分,简单的讲述了5个,有一些内容是我之前也清楚的,比如考虑用户,良好的编码规范。也有一些是有所耳闻的,比如谨慎行动,简单便是美。还有一些是之前从未了解过的,比如使用函数式编程,自己之前也从未接触过函数式编程,所以即使读完以后也不甚了解,在网上查阅资料后,才知道 Haskell 是典型的函数式语言,希望自己能抽空来学习一下。
ARTS Week 7的更多相关文章
- KDE声音服务器 arts
KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...
- 【ARTS】01_21_左耳听风-201900401~201900407
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_20_左耳听风-20190325~20190331
zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...
- 【ARTS】01_19_左耳听风-20190318~20190324
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_18_左耳听风-20190311~20190317
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_16_左耳听风-20190225~20190303
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_15_左耳听风-20190218~20190224
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_14_左耳听风-20190211~20190217
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 【ARTS】01_13_左耳听风-20190204~20190210
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
随机推荐
- PostgreSQL基础操作
1. 查看版本信息 1.1 查看客户端版本信息 黑窗口中输入:psql --version(有两条横线) 没有配置全局的环境变量时,就只能在PostgreSQL安装目录的bin目录中打开黑窗口执行该命 ...
- 13.利用pymysql创建变量类型的表名解说
在练习爬虫爬取数据时,想将爬取的数据用pymysql存储到数据库中,并且存储时的表名是一个变量,但在写完代码运行后经常出面1064的错误代码,在网上查找相关解决方法,但一直找不到完美的解决方法, 通过 ...
- Freemarker 的基础使用 (一)
以下内容来自:http://www.oschina.net/p/freemarker FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker ...
- Redis入门--1.安装Redis
redis是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 redis能干嘛? 主要是用来做缓存,但不仅仅 ...
- webpack实践——DLLPlugin 和 DLLReferencePlugin的使用
DLLPlugin 和 DLLReferencePlugin的使用 DLLPlugin 和 DLLReferencePlugin 用某种方法实现了拆分 bundles,同时还大大提升了构建的速度. 1 ...
- 使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)
前言 微信群机器人,主要用来管理群聊,提供类似天气查询.点歌.机器人聊天等用途. 由于微信将web端的协议封杀后,很多基于http协议的群聊机器人都失效了,所以这里使用基于PC端协议的插件来实现. 声 ...
- wireshark使用过程中,卡死未响应
原因 : 未知 处理办法:1.重装wireshark ----------无效果 2.卸载有道词典-----------成功,wireshark正常运行,重装有道词典该问题必现,所以问题由有道词典引起 ...
- crawler碎碎念5 豆瓣爬取操作之登录练习
import requests import html5lib import re from bs4 import BeautifulSoup s = requests.Session() #这里要提 ...
- Activiti工作流引擎开发系列
Activiti工作流引擎开发系列-01 作者:Jesai 没有伞的孩子,只能光脚奔跑! 前言: 初次接触工作流这个概念是自从2014年11月份开始,当时是由于我的毕业设计需要,还记得当时我毕业设计的 ...
- Android studio 连接真机
首先用数据线连接真机 1.打开开发者模式(小米手机mix2s为例 设置->我的设备->全部参数->连续点击MIUI版本——开启成功) 2.在更多设置中找到系统安全设置——允许安装未知 ...