灯泡开关(JS实现)
1 题目
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换*后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
示例:
输入: 3
输出: 1
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
*轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭].
你应该返回 1,因为只有一个灯泡还亮着。
链接:https://leetcode-cn.com/problems/bulb-switcher
2 思路
仔细观察,可以看出规律只有完全平方数索引处的灯泡还亮着,即1,4,9等。。。
3代码
/**
* @param {number} n
* @return {number}
*/
var bulbSwitch = function(n) {
return Math.floor(Math.sqrt(n));
};
超级丑数(JS实现)
1 题目
编写一段程序来查找第 n 个超级丑数。
超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。
示例:
输入: n = 12, primes = [2,7,13,19]
输出: 32
解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。
说明:
1 是任何给定 primes 的超级丑数。
给定 primes 中的数字以升序排列。
0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。
第 n 个超级丑数确保在 32 位有符整数范围内。
链接:https://leetcode-cn.com/problems/super-ugly-number
2 思路
这道题和之前丑数二有点类型,区别在于这里的质数数组为输入参数,而不再是固定的了,但本质上不变,在原来的动态规划的基础上增加一个循环即可
3代码
/**
* @param {number} n
* @param {number[]} primes
* @return {number}
*/
var nthSuperUglyNumber = function(n, primes) {
const res = [1];
let p = [];
for (let i=0;i<primes.length;i++){ //初始化指针
p.push(0);
}
let prev;
let minIndex = 0;
while(res.length < n) {
let min = res[p[minIndex]] * primes[minIndex]; //初始化*小值
for (let i=0;i<primes.length;i++){ //循环比较获取当前*小乘积
let num = res[p[i]] * primes[i];
min = Math.min(min, num);
if (min === num) minIndex = i;
}
if (prev !== min) res.push(min); //用于去重
prev = min;
p[minIndex]++;
}
return res[res.length – 1];
};
一、在使用高德地图的API的时候,没有办法实现定位,在这里说一下在真机测试的时候出现没法定位应该注意的几点问题和解决方法。
1.将mapView添加到self.view上,[self.view addSubView:self.mapView];
2.在plist文件中添加一个属性NSLocationAlwaysUsageDescription。
3.设置mapView的一个属性,self.mapView.showUserLocation = YES,这个属性一定要设置为YES。
4.设置mapView的另一个属性,self.mapView.userTraceMode = 1,将这个属性设置为1。
二、在用高德地图API的时候,还会遇见一个为题,就是总是提示:INVALID_USER_SCODE。当遇见这个问题的时候,一般的问题都是,注册key之后没有十分钟就开始使用这个key值了。另外一种情况就是注册的key值有问题,应该重新注册一个key值,当注册的时候,填写bundleIdentifier的时候,*好是在程序中用[NSBundle mainBundle].bundleIdentifier;将bundleIdentifier打印出来然后复制到注册的bundleIdentifier位置处,然后注册一个新的key重新使用。
错误原因:
CBCentralManager 的创建是异步的,如果初始化完成之后没有被当前创建它的类所持有,控制台会报错(说白了如果是局部变量就会在控制台报错)
解决方法:
queue:指明在哪个队列处理事件,为nil时表示在主线程处理
options:这个字典有俩个官方的key
CBCentralManagerOptionShowPowerAlertKey:提示蓝牙开关未打开时会弹出警告框
CBCentralManagerOptionRestoreIdentifierKey:一个指定中央管理器的uid(和蓝牙程序进入后台
有关,没有多做研究)
错误原因:
1、com.apple.LocalAuthentication Code=-6
Biometry is not available on this device.(不支持在iPhone 4s,5设备上运行)
2、com.apple.LocalAuthentication Code=-1000
Simulator is not supported.(不支持在i模拟器设备上运行)
3、com.apple.LocalAuthentication Code=-1
Aplication retry limit exceeded.(连续三次指纹识别错误)
4、com.apple.LocalAuthentication Code=-2
Canceled by user.(用户在Touch ID对话框中点击了取消按钮)
5、com.apple.LocalAuthentication Code=-1
Biometry is locked out.(Touch ID功能被锁定,下一次需要输入系统密码)
6、com.apple.LocalAuthentication Code=-3
Fallback authentication mechanism selected.(用户在Touch ID对话框中点击输入密码按钮)
错误原因:
1、*种情况是证书问题,打包需使用线上Distribution证书,调试使用Developer 证书,检查一下对应证书是否存在。
2、第二种情况是配置文件问题,可以检查发布证书和配置文件是否匹配或者配置文件是否失效,这样也会导致这种情况出现。
解决方法:
1、设置代码签名,选择对应证书
Project –> Targets –> Build Setting –> Code Signing Identity –>iPhone Developer
2、重新生成对应证书的配置文件,然后在Xcode中下载配置文件
Xcode—>Preferences—>Accounts—>选中对应的AppleID—>选中对应的Team—>Download Manual profiles
错误原因:
添加SRWebSocket.h/m出现如下报错
解决方法:
Product > Clean Product > Build Phases > Link Binary With Libraries
添加系统依赖库 libicucore.tbd,重新编译运行,问题即可解决
错误原因:
UICollectionViewFlowLayout 不支持数值为负数或为0尺寸cell,当itemSize等于 CGSizeZero 数据源方法返回每一个cell的方法不会执行,说明只有cell数值为正数时尺寸才能返回cell,layout.itemSize = CGSizeZero;
解决方法:
需要在代理方法重新计算item大小:
– (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
错误原因:
插入了不识别的数据类型,NSUserDefaults支持的数据类型有 NSString、 NSNumber、NSDate、 NSArray、NSDictionary 、BOOL、NSInteger、NSFloat等系统定义的数据类型。
解决方法:
自定义的类型需要转成NSData再存入。
错误原因:
是模糊证书信任问题,苹果全球开发者关系证书颁发机构证书的信任设置被修改成始终信任,而不是使用系统默认,导致出现的。
扩展一下证书的分类:
1、根证书,Root certificate
2、中间证书,Intermediate certificate
3、叶子证书,leaf certificate
比如下面三个就是属于这个分类情况:
Apple Root Certificate Authority(根证书)
Developer ID Certification Authority(系统根证书)
Apple Worldwide Developer Relations Certification Authority(系统证书)
解决方法:
首先检查电脑的钥匙串里面是否有:Apple Application Integration Certification Authority和Apple Worldwide Developer Relations Certification Authority这两个证书,然后将这两个证书的信任设置由始终信任改成系统默认即可。