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的更多相关文章

  1. KDE声音服务器 arts

    KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...

  2. 【ARTS】01_21_左耳听风-201900401~201900407

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  3. 【ARTS】01_20_左耳听风-20190325~20190331

    zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...

  4. 【ARTS】01_19_左耳听风-20190318~20190324

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 【ARTS】01_18_左耳听风-20190311~20190317

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【ARTS】01_17_左耳听风-20190304~20190310

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. 【ARTS】01_16_左耳听风-20190225~20190303

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. 【ARTS】01_15_左耳听风-20190218~20190224

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  9. 【ARTS】01_14_左耳听风-20190211~20190217

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  10. 【ARTS】01_13_左耳听风-20190204~20190210

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

随机推荐

  1. Dockerfile文件记录(用于后端项目部署)

    Dockerfile文件记录(用于后端项目部署) 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理) 此文结合另一篇博客共同构成后端服 ...

  2. 轻量级开源小程序SDK发车啦

    Magicodes.WxMiniProgram.Sdk 轻量级微信小程序SDK,支持.NET Framework以及.NET Core.目前已提供Abp模块的封装,支持开箱即用. Nuget 新的包 ...

  3. infer 代码静态分析

    infer 代码静态分析 静态代码分析工具,主要是为了提高我们的代码质量. 通常,我们提高代码质量的方式是通过CodeReview,但是这个过程耗费的人工和时间往往较大.并且随着代码量的增加人肉检测起 ...

  4. Helm, 在Kubernetes中部署应用的利器

    一.背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案.它在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器 ...

  5. 关于在读取excel的文件时候,放在服务器上就报路径错误

    就是指定这个路径:C:\Program Files (x86)\IIS Express 因为在上传到服务器的时候,服务器读取的是在服务器上的路径,所以正确的思路应该是 把上传的Excel存在服务器上, ...

  6. VirtualBox扩充磁盘&清空安装包

    1.virtual box 扩充磁盘空间 D:\VirtualBox\VBoxManage.exe modifyhd "E:\virtual box\daisyyun\daisyyun.vd ...

  7. 每天玩转3分钟 MyBatis-Plus - 2. 普通查询

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 mybatis-plus的查询功能非常强大, 这一篇,我们来看下mybati ...

  8. KMO检验和Bartlett球形检验

    KMO检验和Bartlett球形检验因子分析前,首先进行KMO检验和巴特利球体检验,KMO检验系数>0.5,(巴特利特球体检验的x2统计值的显著性概率)P值<0.05时,问卷才有结构效度, ...

  9. 你在使用什么 Redis 客户端工具?

    今天发现一个不错的 Redis 客户端工具:AnotherRedisDesktopManager. 兼容 Windows Mac Linux,号称又快又稳定,加载大量 keys 时也不会崩溃. Git ...

  10. JVM内存布局及GC知识

    一.JVM运行时内存布局 按java 8虚拟机规范的原始表达:(jvm)Run-Time Data Areas, 暂时翻译为"jvm运行时内存布局". 从概念上大致分为6个(逻辑) ...