vmagaziy
BAN USERAll permutations can be obtained by using recursion: obtaining letters for remaining digits and adding them to the tail of already obtained strings.
NSArray *allStringsForTelephoneNumberWithDigits(NSArray* digits,
NSUInteger startIndex, NSArray* baseStrings) {
if (startIndex == [digits count]) {
return baseStrings;
}
if (0 == [baseStrings count]) {
baseStrings = dict[digits[startIndex]];
} else {
NSArray* digitStrings = dict[digits[startIndex]];
if (0 != [digitStrings count]) {
NSMutableArray* newBaseStrings = [NSMutableArray array];
for (NSString* digitString in digitStrings) {
for (NSString* baseString in baseStrings) {
NSString* newBaseString =
[baseString stringByAppendingString:digitString];
[newBaseStrings addObject:newBaseString];
}
}
baseStrings = [NSArray arrayWithArray:newBaseStrings];
}
}
return allStringsForTelephoneNumberWithDigits(digits, startIndex + 1, baseStrings);
}
Sample:
allStringsForTelephoneNumberWithDigits(@[ @1, @1, @2, @1, @1, @8 ], 0, nil);
It’s not clear what additional limitations are supposed to be taken into account, if there are no constraints and Foundation can be used then solution is fairly simple.
@import Foundation;
NSArray *mergedAndSortedArrayForArrays(NSArray* arrays) {
NSMutableSet* elements = [NSMutableSet set];
for (NSArray* array in arrays) {
assert([array isKindOfClass:[NSArray class]]);
[elements addObjectsFromArray:array];
}
NSSortDescriptor* sortDescriptor = [NSSortDescriptor
sortDescriptorWithKey:nil ascending:YES];
return [elements sortedArrayUsingDescriptors:@[ sortDescriptor ]];
}
Provided it's related to OS X or iOS and the power of Foundation can be used:
@import Foundation;
BOOL containsAnnagrams(NSArray* words) {
NSMutableSet* characterSets = [NSMutableSet set];
for (NSString* word in words) {
NSCharacterSet* characterSet = [NSCharacterSet characterSetWithCharactersInString:word];
if ([characterSets containsObject:characterSet]) {
return YES;
}
[characterSets addObject:characterSet];
}
return NO;
}
Here is implementation written using Objective-C:
- vmagaziy April 30, 2014