每周完成一个 ARTS:
Algorithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
难度:Easy
题意:
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1
is read off as "one 1"
or 11
. 11
is read off as "two 1s"
or 21
. 21
is read off as "one 2, then one 1"
or 1211
.
Given an integer n
where 1 ≤ n ≤ 30
, generate the n
th term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
示例 1:
Input: 1
Output: "1"
示例 2:
Input: 4
Output: "1211"
解法:
本题乍一看比较难以理解,但是仔细一想其实并不难,就是对于前一个数,找出相同元素的个数,把个数和这个元素存储到新的字符串中去。
代码:
class Solution:
def countAndSay(self, n: int) -> str:
seq = "1"
for i in range(n-1):
seq = self.getNext(seq)
return seq
def getNext(self, seq):
i, next_seq = 0, ""
while i < len(seq):
count = 1
while i < len(seq) - 1 and seq[i] == seq[i+1]:
count += 1
i += 1
next_seq += str(count) + seq[i]
i += 1
return next_seq
本周阅读了 QUARTZ 上的一篇文章 The World In 50 Years,QUARTZ 请了 50 位不同领域的学者就未来五十年做了预测,问题涉及到技术、经济、政治、人类生活中的生存、交流、娱乐、衣食住行等方方面面。
但实际上,这种预测的具体内容就当吃瓜看看就好,每个人对技术和未来的理解都不同,重要的是这些不同领域的学者智库站在不同角度观察世界的方式,这才是最能启迪人思想的地方。
正如 Linux 之父 Linus 所言:
Talk is cheap. Show me the code.
代码才是最能反映一个编程人员水平的方式,于是有了这个 Github 上的一个开源项目:Show-me-the-code:Python 练习册,每天一个小程序。于是我尝试做了两道题,觉得比较有趣,记录下来。
第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
思路: 因为激活码要保证不能重复,所以使用集合这一数据结构来装所有的激活码。
首先生成一个 keys 的集合,生成一个大写字母和 0-9 的数字组成的 source 库,这是个列表。
使用 while 循环来生成激活码,从生成的 source 列表中使用 random.choice()
函数随机选择 length 个字符加到一起作为一个激活码。
将这个激活码加入到 keys 中去,这里 add()
函数会自动判断生成的激活码在不在 keys 中,如果不在,集合长度加一,否则集合长度不会增加。
继续循环直到集合长度等于初始设定的 number 数。
Code:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
@Author: AlainOUYANG
@Date: 2019-10-21 17:06:02
@LastEditors: AlainOUYANG
@LastEditTime: 2019-10-21 17:47:19
@Description: Show-me-the-code 0001
'''
import random
import string
def gen_activation_key(length, number):
'''
@description: generate activation key
@length {int}
@number {int}
@return: set
'''
keys = set()
source = list(string.ascii_uppercase + string.digits)
while len(keys) < number:
key = ''
for i in range(length):
key += random.choice(source)
keys.add(key)
return keys
if __name__ == "__main__":
length = int(input("Please set the length of keys: "))
number = int(input("Please set the number of keys: "))
keys = gen_activation_key(length, number)
print("Here are the keys generated (total: {0}):".format(len(keys)))
for each_key in keys:
print(each_key + ' length: {0}'.format(len(each_key)))