前言:剑指offer刷题系列
问题1:
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
思路:
拿到这个题我首先想的是如何解决n位进制数的问题,只要解决n位进制的问题,就可以解决这个问题了。 函数定义了一个名为printNumbers的方法,接受一个整数n作为参数,返回一个整数列表作为结果。
我首先创建一个空列表,用于存储生成的整数。然后计算10的n次方,作为生成整数的上限,存储在limit变量中,使用一个for循环,从1开始,到limit结束(不包括limit),每次增加1,将当前循环的值添加到列表re中,最后返回列表re作为结果。 时间复杂度:O(n) 空间复杂度:O(n)
基于上述思考,代码如下:
class Solution:
def printNumbers(self, n: int) -> List[int]:
re = []
limit = (10 ** n)
for i in range(1,limit):
re.append(i)
return re
执行结果如下图:
学到的知识点:
学会使用Python的幂运算符来计算一个数的任意次方。
复习了一下使用append函数向列表中添加函数。
问题2:
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例:
输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]
思路:
题目只需要找出其中最小的k个数,我首先想的是将list数组arr排序,然后输出前面k个值就行。
将arr数组用sort函数排序一下,arr数组中的值就按从小到大的顺序排列好了,然后输出排好序的arr数组中的前k个值。
时间复杂度:O(nlogn)
空间复杂度:O(logn)
基于上述思考,代码如下:
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
arr.sort()
return arr[:k]
执行结果如下图:
这道题的思想特别简单,就是排序一下,其实也可以自己实现一个排序算法,可以冒泡排序走一个哈哈哈。