Obective-C
/// 将一个数组旋转 k 步
/// @param array 数组
/// @param step 步骤
- (NSArray<NSNumber *> *)parameter1:(NSArray<NSNumber *> *)array parameter2:(NSUInteger)step {
if (step == 0) {
NSLog(@"您相当于什么都没做哦~");
return array;
}
if (step > array.count) return nil;
// 个数相等就直接逆序排列:
if (step == array.count) {
return [array.reverseObjectEnumerator allObjects];
}
// 下面的情况都是 key < array.count 的情况:
// 拿到从后面开始数的那一部分子数组:
NSArray *afterSubArray = [array subarrayWithRange:NSMakeRange(array.count - step, step)];
NSArray *preSubArray = [array subarrayWithRange:NSMakeRange(0, array.count - step)];
NSMutableArray *mArray = @[].mutableCopy;
[mArray addObjectsFromArray:afterSubArray];
[mArray addObjectsFromArray:preSubArray];
return mArray;
}
Swift
// 将一个数组旋转 k 步:
func rotateArray(array: [Int] , step: Int) -> [Int]? {
// 空数组, 不允许:
guard !array.isEmpty else {
print("空数组, 不允许")
return []
}
// 步数比数组个数还大, 不允许:
guard step <= array.count else {
print("步数比数组个数还大, 不允许")
return nil
}
// 步数和数组个数相等 , 完全倒置即可:
if step == array.count {
return array.reversed()
}
return Array(array[(array.count - step)...] + array[..<(array.count - step)])
}