算法第一天:
帕斯卡三角形
-(NSArray *)pascalsTriangleWithNumRows:(int)numRows{
NSMutableArray *triangleArr = [NSMutableArray new];
if (numRows == 0 ) {
return triangleArr;
}
[triangleArr addObject:@[@1]];
for (int i = 1; i<numRows; i++) {
NSMutableArray *rowArr = [NSMutableArray new];
[rowArr addObject:@1];
//创建新数组:只有新数组里面才有值 triangleArr里面的内容还是没变的
//[triangleArr arrayByAddingObject:@[@1]];
NSArray *preRowArr = [NSArray new];
preRowArr = triangleArr[i -1];
for (int j = 1; j<i; j++) {
//number类型转int类型不能用(int)强转
//否者会出现会出现1+1=36的错误,什么原因还不清楚
int sum = [preRowArr[j-1] intValue] + [preRowArr[j] intValue];
[rowArr addObject:@(sum)];
}
[rowArr addObject:@1];
[triangleArr addObject:rowArr];
}
return triangleArr;
}
Pascal's Triangle 如下
- 1
- 1 1
- 1 2 1
- 1 3 3 1
遇到的问题:
array.firstObject是@"1", 是一个NSStrng对象,
(int)NSString对象的意思是取对象地址进行强转为int
由于NSSring是存在内存的数据区, 所以以下代码打印结果是一样的
NSString *str = @"1";
NSArray *arr = @[@"1"];
int a = (int)str;
int b = (int)arr.firstObject;
NSLog(@"a = %zd",a);
NSLog(@"b = %zd",b);
a = 106422400
b = 106422400