我想在 Objective-C 中开发所有可能的总和以达到结果,就像在另一个线程中一样,但在 Objective-C 中
JAVA代码为:
public void sum_up_recursive(ArrayList<Integer> numbers, int target, ArrayList<Integer> partial) {
int s = 0;
for (int x: partial) s += x;
if (s == target){
System.out.println("sum("+Arrays.toString(partial.toArray())+")="+target);
}
if (s >= target)
return;
for(int i=0;i<numbers.size();i++) {
ArrayList<Integer> remaining = new ArrayList<Integer>();
int n = numbers.get(i);
for (int j=i+1; j<numbers.size();j++) remaining.add(numbers.get(j));
ArrayList<Integer> partial_rec = new ArrayList<Integer>(partial);
partial_rec.add(n);
sum_up_recursive(remaining,target,partial_rec);
}
}
我对 Objective-C 的意图:
主类:
NSMutableArray *numbers = [[NSMutableArray alloc] init];
[numbers addObject:@2];
[numbers addObject:@4];
[numbers addObject:@8];
[numbers addObject:@16];
[numbers addObject:@32];
NSMutableArray *partial = [[NSMutableArray alloc] init];
[testclass sum_up_recursive:numbers : 12 :partial];
方法:
- (void) sum_up_recursive: (NSMutableArray*) numbers: (int) target:(NSMutableArray*) partial{
NSInteger s = 0;
for (NSNumber *x in partial){
s = s + [x integerValue];
}
if (s == target){
NSLog(@"RESULT: %@", partial);
}
if (s >= target){
return;
}
for (NSInteger i = 0 ; i < [numbers count]; i++) {
NSMutableArray* remaining;
NSInteger n = [numbers objectAtIndex:i];
for (NSInteger j=i+1 ; j < [numbers count]; j++) {
[remaining addObject:[numbers objectAtIndex:j]];
}
NSMutableArray *partial_rec = partial;
[partial_rec addObject: [NSNumber numberWithInteger:n]];
[self sum_up_recursive:remaining:target:partial_rec];
}
}
我没有错误,但我没有结果,我无法达到目标值,我是一名Android开发人员,可能任何有更多经验的人都可以看到我的代码中的错误是什么或给出其他意见。
我修复了错误,此方法完美运行:
- (void) sumUpRecursive:(NSMutableArray *)numbers withTarget:(NSInteger)target withPartial:(NSMutableArray *)partial {
NSInteger s = 0;
for (NSNumber *x in partial){
s = s + [x integerValue];
}
if (s == target){
NSLog(@"RESULT: %@", partial);
}
if (s >= target){
return;
}
for (NSInteger i = 0; i < [numbers count]; i++) {
NSMutableArray *remaining = [[NSMutableArray alloc] init];
NSInteger n = [[numbers objectAtIndex:i] integerValue];
for (NSInteger j = i + 1; j < [numbers count]; j++) {
[remaining addObject:[numbers objectAtIndex:j]];
}
NSMutableArray *partial_rec = [[NSMutableArray alloc] init];
[partial_rec addObjectsFromArray:partial];
[partial_rec addObject: [NSNumber numberWithInteger:n]];
[self sumUpRecursive:remaining withTarget:target withPartial:partial_rec];
}
}
该方法的输出是:
数字(2、4、8、16、32)
1) 示例,总和目标:12,输出:4,8 表示.. 4+8。
2) 示例,总和目标:14,输出:2,4,8。
3) 示例,总和目标:44,输出:4,8,32
这个问题不是重复的,因为在另一个问题中,想法是搜索所有组合来求和,但问题只适用于 2 个数字,在我的例子中,我需要尝试使用 N+ 个数字。
最佳答案
首先,您的方法使用了非常不标准的语法。
- (void) sum_up_recursive: (NSMutableArray*) numbers: (int) target:(NSMutableArray*) partial{
通常你会做类似的事情
- (void)sumupRecursive:(NSMutableArray*)numbers target:(int)target partial:(NSMutableArray*)partial
调用就像这样
[self sumupRecursive:numbers target:100 partial:someOtherArray];
代码中的两个错误是“剩余”将始终为零,因为您从未将其设置为可变数组,并且“NSInteger n = [numbers objectAtIndex:i]”不应编译; objectAtIndex 返回 NSNumber* 而不是 NSInteger。
我什至没有试图理解代码应该做什么。
关于ios - Objective-C,计算一组值的所有可能总和以达到结果目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765589/