最近做了很多数组或整数等的旋转或逆序输出等算法,在知乎总结一下,大家一起学习。
题目一:
将包含 n 个元素的数组向右旋转 k 步。
例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4]。
要求:要求空间复杂度为 O(1) (这里的意思就是别想着新建个列表)
方法一:
class Solution(object):
def rotate(self,nums,k):
lenth = len(nums) -1
if lenth<1 or k<1:
return
#暴力方法,将后面的删掉插到前面
for i in range(k):
nums.insert(0,nums[lenth]) #将最后一个插到前面来
del nums[lenth + 1]#多个一个数所以lenth+1,将插到前面的数字删除
return nums
list= [1,2,4,5,7]
print(Solution().rotate(list,2))
顺便写一下内置函数 del和insert的用法:
insert(位置,元素)
del=> del a[0] 删除坐标为0;del a[1:3]删除坐标1到3的元素;del a 删除a:
方法二:
比较骚,就是使用reverse:
1 2 3 4 5 6 如果k = 2 的话, 会变成 5 6 1 2 3 4
6 5 4 3 2 1 先翻转整个数组
5 6 4 3 2 1 翻转前k个数字
5 6 1 2 3 4 翻转后面几个数字
class Solution(object):
def rotate(self, nums, k):
lenth = len(nums) - 1
if lenth < 1 or k < 1:
return
if (k < lenth):
nums.reverse()
nums[0:k] = reversed(nums[0:k])
nums[k:] = reversed(nums[k:])
else:
for i in range (k):
nums.insert(0, nums[lenth])
del nums[lenth + 1]
return nums
list = [1,2,3,4]
print(Solution().rotate(list,2))
说实话比较适合长的数组。
题目二:
反转一个整数:如123=》321 , -123=》-321,120=》21
方法一:正常整数方法实现,利用余数*10累加的方法完成。需要注意的是,python对整数除法采用“向下取整”机制,所以正数和负数要区别运算
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
num = 0
if x == 0:
return 0
if x < 0:
x = -x
while x != 0:
num = num*10 + x%10
x = x/10
num = -num
else:
while x != 0:
num = num*10 + x%10
x = x/10
if num>pow(2,31)-1 or num < pow(-2,31):
return 0
return num
方法二:变成字符串再反转
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
plus_minus = ""
reverse_x = ""
if x<0:
plus_minus = "-"
x = -x
for i in str(x):
reverse_x = i + reverse_x
reverse_x = plus_minus +reverse_x
if int(reverse_x)>pow(2,31)-1 or int(reverse_x)
return 0
return int(reverse_x)
题目三:
将一个数组逆序输出
方法一:
def TheReverseArray(list):
length = len(list)
a=[]
for i in range(length):
a.append(list[length - i-1])
return a
print(TheReverseArray([1,2,4,5,2,3]))
方法二:
数组前后交换
def TheReverseArray(list):
N = len(list)
for i in range(int(len(list) / 2)):
list[i], list[N - i - 1] = list[N - i - 1], list[i]
return list
print(TheReverseArray([1,3,2,4]))
想到其他办法后续补充~