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. Hexo + Serverless Framework,简单三步搭建你的个人博客

    很多人都想拥有自己的个人博客,还得看起来漂亮.酷酷的.尤其对开发者来说,不仅可以分享技术(装)心得(逼),面试的时候还能成为加分.这里介绍两款好用的神器,不用忙前(前端)忙后(后端),简单3min即可 ...

  2. Linux学习_菜鸟教程_4

    Linux远程登录 已经了解了登录流程,学会了用SecureCRT进行操作 Linux文件基本属性 Linux为保护系统安全,对不同的用户,开放不同的文件访问权限. 在linux中,我们可以使用ll或 ...

  3. JVM之GC算法的实现(垃圾回收器)

    上一节:<JVM之GC算法> 知道GC算法的理论基础,我们来看看具体的实现.只有落地的理论,才是真理. 一.JVM垃圾回收器的结构 JVM虚拟机规范对垃圾收集器应该如何实现没有规定,因为没 ...

  4. 高效测试框架推荐之Ginkgo

    自2015年开始,七牛工效团队一直使用Go语言+Ginkgo的组合来编写自动化测试用例,积累了大约5000+的数量.在使用和维护过程中,我们觉得Ginkgo的很多设计理念和功能非常赞,因此特分享给大家 ...

  5. Scanner使用方法

    import java.util.Scanner; //导入包 public void main (String args[]){ Scanner a=new Scanner(System.in); ...

  6. centos7 安装jdk8和maven3

    centos7 安装jdk8和maven3 标签(空格分隔): java,linux jdk 第一种安装: yum install java-1.8.0-openjdk /usr/lib/jvm/ 默 ...

  7. express框架中使用nodemon自启动服务

    1.安装nodemon //全局安装 npm install -g nodemon //本地安装 npm install nodemon --save 2.修改package.json配置 " ...

  8. CF825G Tree Queries

    [题意] 一棵树有 n个节点,初始均为白色,有两种操作: 1. 1 x 代表把结点 x 设置为黑色 2. 2 x 代表查询 x 到树上任意一个黑色结点的简单路径上的编号最小的结点的编号 输入 t 和 ...

  9. APICloud联合腾讯云推出“云主机解决方案“,各种福利等你拿

    为了帮助开发者一站式打通云.开发.运维全流程服务,更全面提供基于自身业务情况的云服务器.数据库.存储等基础设施服务,APICloud联合腾讯云重磅推出“云主机解决方案“.开发者可通过控制台简单清晰的购 ...

  10. java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍

    pinyin pinyin 是 java 实现的高性能中文拼音转换工具. 变更日志 创作目的 想为 java 设计一款便捷易用的拼音工具. 如何为 java 设计一款高性能的拼音转换工具 pinyin ...