内容目录
该博文旨在记录一些日常python基础练习的题目及实现,用于熟练python基础数据结构的用法,以及一些比较好的算法思路。
# 1. 反转一个三位数
# 反转一个三位数的整数,如输入123,输出321;输入900,输出9
# 代码顺序编写
num = int(input("请输入一个三位数的整数:"))
ge = num%10
shi = num//10%10
bai = num//100
print("反转后的数字是:", ge*100+shi*10+bai)
请输入一个三位数的整数:123
反转后的数字是: 321
# 使用面向对象编程
class Solve():
def reverse_num(self,num):
ge = num%10
shi = num//10%10
bai = num//100
return ge*100+shi*10+bai*1
# 代码顺序编写
num1 = int(input("请输入一个三位数的整数num1:"))
num2 = int(input("请输入一个三位数的整数num2:"))
print("num1反转后的数字是:", Solve().reverse_num(num1))
print("num2反转后的数字是:", Solve().reverse_num(num2))
请输入一个三位数的整数num1:123
请输入一个三位数的整数num2:900
num1反转后的数字是: 321
num2反转后的数字是: 9
# 2. 合并数组排序
# 合并两个升序的整数数组A和B,形成一个新的数组,新数组也要有序。
# 举例:A=[1],B=[1],输出[1,1],返回合并后的数组。输入A=[1,2,3,4],B=[2,4,5,6],
# 输出[1,2,2,3,4,4,5,6],返回合并所有元素后的数组。
# 不要脸实现法
A=[1,2,3,4]
B=[2,4,5,6]
print(sorted(A+B))
[1, 2, 2, 3, 4, 4, 5, 6]
A=[1,2,3,4]
B=[2,4,5,6]
A.extend(B)
A.sort()
print(A)
[1, 2, 2, 3, 4, 4, 5, 6]
from heapq import merge
A=[1,2,3,4]
B=[2,4,5,6]
res = list(merge(A, B))
print(str(res))
[1, 2, 2, 3, 4, 4, 5, 6]
# 自己编写算法实现
# 这里面其实可以有很多思考,比如如果为了降低空间复杂度,不使用新的变量result,怎么达到要求,
# 因为列表的长度是变得,所以最好不要在该列表的遍历中(不管是用for还是其他),对列表进行修改操作。
# 这里需要注意避坑。
A = [1,2,3,4]
B = [2,4,5,6]
result = []
i, j = 0,0
while i < len(A) and j < len(B):
if A[i] < B[j]:
result.append(A[i])
i = i+1
else:
result.append(B[j])
j = j+1
result = result + A[i:] + B[j:]
print (str(result))
[1, 2, 2, 3, 4, 4, 5, 6]
# 3. 给定一个字符串和一个偏移量,根据偏移量原地从左向右旋转字符串
# 举例:输入str="abcdefg",offset=3,输出"efgabcd",输入str="abcdefg",offset=0,输出"abcdefg"
# 输入str="abcdefg",offset=1,输出"gabcdef",输入str="abcdefg",offset=2,输出"fgabcde"
in_str = input("输入字符串:")
offset = int(input("请输入偏移数:"))
in_lst = list(in_str)
if offset>len(in_str):
print("偏移量超过字符串长度!")
elif offset==0:
print(in_str)
else:
tmp1 = in_lst[-offset:]
tmp2 = in_lst[:len(in_lst)-offset]
print(''.join(tmp1+tmp2))
输入字符串:abcdefg
请输入偏移数:2
fgabcde
# 4. 二分查找
# 给定一个排序的整数数组(升序)和一个要查找的目标整数target,查找到target第一次出现的下标
# (从0开始),如果target不存在于数组中,返回-1.
# 示例:输入数组[1,4,4,5,7,7,8,9,9,10]和目标整数1,输出其所在位置为0,即第一次出现在第0个位
# 置。输入数组[1,2,3,3,4,5,10]和目标整数3,输出位置2,即3第一次出现在第2个位置。
class Solution:
# 参数nums:整数数组
# 参数target:要查找的目标数字
# 返回值:目标数字的第1个位置,从0开始
def binarySearch(self,nums,target):
return self.search(nums,0,len(nums)-1,target)
def search(self,nums,start,end,target):
if start > end:
return -1
mid = (start + end)//2
if nums[mid] > target:
return self.search(nums,start,mid,target)
if nums[mid] == target:
return mid
if nums[mid] < target:
return self.search(nums,mid,end,target)
# 主函数
if __name__ == "__main__":
my_solution = Solution()
nums = [1,2,3,4,5,6]
target = 3
targetIndex = my_solution.binarySearch(nums,target)
print("输入:nums = ",nums,"target = ",target)
print("输出:",targetIndex)
输入:nums = [1, 2, 3, 4, 5, 6] target = 3
输出: 2