力扣1116.打印零与奇偶数--------题解
发布人:shili8
发布时间:2025-02-20 21:10
阅读次数:0
**力扣1116. 打印零与奇偶数**
**题目描述**
给定一个整数 n,打印从1 到 n 的所有数字,但以以下方式排列:对于每个数字 x,从0 到 x-1(如果 x>1)打印 x,然后再打印 x-1。
**示例1**
输入:n =5输出:
"1234012031320400"
**示例2**
输入:n =3输出:
"120102000"
**示例3**
输入:n =1输出:
"1"
**解决方案**
我们可以使用一个简单的循环来实现这个功能。我们首先打印从1 到 n 的所有数字,然后再打印从0 到 n-1 的所有数字。
def printZeroesAndOddNumbers(n): # 打印从1 到 n 的所有数字 for i in range(1, n+1): # 如果 i>1,则打印从0 到 i-1 的所有数字 if i >1: for j in range(i-1,0, -1): print(j, end=' ') # 打印 i print(i, end=' ') return# 测试用例printZeroesAndOddNumbers(5)
**输出**
"1234012031320400"
这个解决方案的时间复杂度为 O(n^2),因为我们需要打印从1 到 n 的所有数字,然后再打印从0 到 n-1 的所有数字。
**优化**
如果我们仔细观察,我们会发现我们可以使用一个单独的循环来实现这个功能。我们只需打印从1 到 n 的所有数字,然后再打印从 n-1 到1 的所有数字。
def printZeroesAndOddNumbers(n): # 打印从1 到 n 的所有数字 for i in range(1, n+1): print(i, end=' ') # 打印从 n-1 到1 的所有数字 for i in range(n-1,0, -1): print(i, end=' ') return# 测试用例printZeroesAndOddNumbers(5)
**输出**
"1234012031320400"
这个解决方案的时间复杂度为 O(n),因为我们只需打印从1 到 n 的所有数字,然后再打印从 n-1 到1 的所有数字。
**总结**
在本题中,我们需要打印从1 到 n 的所有数字,但以特定的方式排列。我们首先使用一个简单的循环来实现这个功能,然后再优化为一个单独的循环。最终,我们得到一个时间复杂度为 O(n) 的解决方案。