您的位置:首页 > 职场人生

一个面试题

2017-02-15 16:00 246 查看
Python:解法

import random

"""

写一个函数输出一个数字中的数字组合的下一个最大组合。例如378的下一个最大的组合是387,71632下一个最大的组合是72136,如果没有更大的组合就返回-1(语言不限)

例子分析:71632

1、从数字后面往前看,如果一直递增则没有更大的组合,返回-1

2、若发现更小的,比如上面1比6小,则从1后面的数字6、3、2中找出比1大的那个最小数为2,然后对剩下的数字1、3、6进行从小到大排序,最终组合为72136

"""

def nextMaxCount(num):# 例子:4565321

if num < 10:

return -1

L = [int(n) for n in str(num)] # L: [4,5,6,5,3,2,1]

for i in range(len(L))[::-1]:

if i == 0:

return -1

if L[i] > L[i-1]:

newL = L[i:] # newL: [6,5,3,2,1]

currentNum = L[i-1]

findNum = -1

for j in range(len(newL))[::-1]:

findNum = newL[j]

if findNum > currentNum:

newL.pop(j) # newL: [5,3,2,1]

newL.append(currentNum)# newL: [5,3,2,1,5]

newL = sorted(newL)# newL: [1,2,3,5,5]

break

targetL = L[:i-1]

targetL.append(findNum)

targetL = targetL + newL

s = ""

for n in targetL:

s = s + str(n)

return s

for i in range(10):

randomNum = random.randint(0,1000000)

nextCout = nextMaxCount(randomNum)

print(str(randomNum) + "--->" + str(nextCout))

OC解法:

// 写一个函数输出一个数字中的数字组合的下一个最大组合。例如378的下一个最大的组合是387,71632下一个最大的组合是72136,如果没有更大的组合就返回-1(语言不限)

/*

例子分析:71632

1、从数字后面往前看,如果一直递增则没有更大的组合,返回-1

2、若发现更小的,比如上面1比6小,则从1后面的数字6、3、2中找出比1大的那个最小数为2,然后对剩下的数字1、3、6进行从小到大排序,最终组合为72136

*/

- (NSUInteger)nextMaxCountWithNum:(NSUInteger)num{ // 例子:4565321

if (num < 10) {

return -1;

}

NSMutableArray *nums = @[].mutableCopy;

while (num) {

[nums insertObject:@(num % 10) atIndex:0];

num /= 10;

}

for (NSInteger i = nums.count - 1; i >= 0; i--) {// nums: [4,5,6,5,3,2,1]

if (i == 0) {

return -1;

}

if (nums[i] > nums[i - 1]) { // i = 2

   NSNumber *currentNum = nums[i-1];

NSMutableArray *lastArr = [nums subarrayWithRange:NSMakeRange(i, nums.count - i)].mutableCopy;// lastArr: [6,5,3,2,1]

NSNumber *findNum = 0;

for (NSInteger j = lastArr.count - 1; j >= 0; j--) {

NSNumber *findN = lastArr[j];

if (findN > currentNum) {

findNum = findN; // findNum: 6

[lastArr removeObjectAtIndex:j]; // lastArr: [5,3,2,1]

[lastArr addObject:currentNum]; // lastArr: [5,3,2,1,5]

break;

}

}

[lastArr sortUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {// lastArr: [1,2,3,5,5]

return obj1.integerValue > obj2.integerValue;

}];

NSMutableArray *targetArr = @[].mutableCopy;

[targetArr addObjectsFromArray:[nums subarrayWithRange:NSMakeRange(0, i-1)]];// targetArr: [4]

[targetArr addObject:findNum]; // targetArr: [4,6]

[targetArr addObjectsFromArray:lastArr]; // targetArr: [4,6,1,2,3,5,5]

NSString *targetStr = [targetArr componentsJoinedByString:@""];

return targetStr.integerValue;

}

}

return -1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: