Pascal's Triangle

178 阅读1分钟

算法第一天:

leetcode.com/articles/pa…

帕斯卡三角形

-(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