leetcode 189题旋转数组

我使用python语言写的,主要有两种方法。
1.先将整个数组反转,在分别反转前k个和后k个,思路很简单。
2.第2种方法是利用python中对list的一些操作,将list分片后再重新组合
两种方法的代码如下:注释中也谢了思路

class Solution(object):    
	def rotate_1(self, nums, k):        
	"""        
	:type nums: List[int]        
	:type k: int        
	:rtype: None Do not return anything, modify nums in-place instead.        	"""
        # 若输入的k不符合范围,则.....        
        k = k % len(nums)# 保证循环次数在0-len(nums)之        
        nums[:] = nums[len(nums)-k:] + nums[:len(nums)-k]# 切割成两块重新组合,再拼接起来
    
    	def rotate_2(self, nums, k):       
    	 """        
    	 :type nums: List[int]       
    	 :type k: int        
    	 :rtype: None Do not return anything, modify nums in-place instead.        	  	"""        
    	 k = k % len(nums)# 必须加一个语句,使k符合规定的范围        				  
    	 self.reverse(nums, 0, len(nums)-1)# 先整个反转        
    	 self.reverse(nums, 0, k-1)# 反转前k部分        
    	 self.reverse(nums, k, len(nums)-1)# 反转后k部分     

 	def reverse(self, nums, l, r):        
 		while l < r:            
 			t = nums[l]           
 			 nums[l] = nums[r]            
 			 nums[r] = t            
 			 l = l+1            
 			 r = r-1                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值