Algorithm
https://leetcode-cn.com/problems/qiu-12n-lcof/
求 1+2+...+n 胶台,要求不能使用乘除法假褪、for署咽、while、if生音、else宁否、switch、case等關(guān)鍵字及條件判斷語(yǔ)句(A?B:C)缀遍。
限制:1 <= n <= 10000
int sumNums(int n) {
n && (n += sumNums(n - 1)); //也可以是(n-1) && (n += sumNums(n - 1));
return n;
}
分析:
- 題目中限制乘除操作慕匠,就不能使用(1+n)*n/2.0的公式了
- 限制了控制語(yǔ)句和循環(huán)語(yǔ)句的使用,不能簡(jiǎn)單的遍歷計(jì)算了
- 那么下面想到的就是遞歸來(lái)遍歷域醇,但是需要一個(gè)結(jié)束條件
- 利用 && 語(yǔ)法的短路特性台谊,可以在 n == 0 的時(shí)候結(jié)束
- 這個(gè)題主要考察基本語(yǔ)法的掌握情況
Review
SF Symbols | New Era in the iOS app symbols
講 iOS13 上系統(tǒng)自帶了很多圖標(biāo),這些圖標(biāo)如何使用譬挚。
這些圖標(biāo)(就目前來(lái)講)很少會(huì)在商業(yè) App 中使用锅铅,一個(gè)是樣式不一定符合 UI 要求,一個(gè)是系統(tǒng)兼容性殴瘦。
不過(guò)文章里提到了 FaceTime 的圖標(biāo)狠角,能且只能用在表示 FaceTime app 的場(chǎng)景号杠。說(shuō)不定某次需求蚪腋,會(huì)使用某種系統(tǒng)圖標(biāo)呢
Tips
CAShapeLayer添加太多性能也會(huì)比較差
之前只是使用 CAShapeLayer 做一些動(dòng)畫丰歌,使用場(chǎng)景比較單一,最近在了解使用 CAShapeLayer 或者 Metal 繪制圖形屉凯。
CAShapeLayer 是更省事的選擇立帖,可以直接將貝塞爾曲線渲染,也可以設(shè)置線的顏色悠砚,dash pattern等晓勇,很省事,但是也有很多局限灌旧,比如單個(gè) ShapeLayer只能有一種線顏色和填充顏色绑咱,只能有一種 dash pattern
所以如果繪制一個(gè)圖形,里面有多種顏色枢泰,或者繪制多個(gè)不同顏色的圖形描融,就需要多個(gè)CAShapeLayer。于是就測(cè)試了一下每幀刷新1000個(gè)CAShapeLayer的FPS衡蚂,最終解決在 iPhone11真機(jī)上是 20窿克,考慮到實(shí)際APP還有很多復(fù)雜渲染邏輯,這個(gè)結(jié)果不太理想毛甲。
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) CADisplayLink *link;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setupLayers];
self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateLayers)];
self.link.preferredFramesPerSecond = 60;
[self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
}
- (void)updateLayers {
[self.view.layer.sublayers enumerateObjectsUsingBlock:^(__kindof CALayer * _Nonnull layer, NSUInteger idx, BOOL * _Nonnull stop) {
if ([layer isKindOfClass:[CAShapeLayer class]]) {
CAShapeLayer *shapeLayer = (CAShapeLayer *)layer;
shapeLayer.fillColor = [self randomColor].CGColor;
}
}];
}
- (void)setupLayers {
for (int i = 0; i < 500; i++) {
CAShapeLayer *layer = [CAShapeLayer layer];
layer.strokeColor = [UIColor redColor].CGColor;
layer.fillColor = [self randomColor].CGColor;
layer.path = [self generatePathWithIndex:i].CGPath;
[self.view.layer addSublayer:layer];
}
}
- (UIBezierPath *)generatePathWithIndex:(NSInteger)i {
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(10, 10, 500 - i/5.0, 500 - i/5.0)];
path.lineWidth = 0.1;
return path;
}
- (UIColor *)randomColor {
return [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
}
@end
Share
Metal并行計(jì)算的學(xué)習(xí)筆記:
Metal 學(xué)習(xí)筆記
另外轉(zhuǎn)發(fā)一篇?jiǎng)e人寫的好文:
為什么魂斗羅只有128KB卻可以實(shí)現(xiàn)那么長(zhǎng)的劇情年叮?