Open Cuuube opened 6 years ago
需要写一个模块,生成N个M位的纯数字手机验证码,并且这N个字符串不能重复。
需求很简单,但还是有点陷阱的。
class Creator { constructor () { } private createOne (length: number): string { let value = String(Math.ceil(Math.random() * Math.pow(10, length))); value = '0'.repeat(length) + value; value = value.substr(value.length - length); return value; } private check (length: number, times: number): void { if (typeof length !== 'number' || typeof times !== 'number') { throw new TypeError('Is not number!'); } else if (Math.pow(10, length) < times) { throw new Error('Times too large!'); } } create (length: number, times: number): string[] { this.check(length, times); let storage = new Set<string>(); while (storage.size < times) { storage.add(this.createOne(length)); } return [...storage]; } } const run = () => { const LENGTH = 2; const TIMES = 11; let creator = new Creator(); let arr = creator.create(LENGTH, TIMES); console.log(arr.every(val => { if (val.length !== LENGTH) { console.log(val); } return val.length === LENGTH; })); // console.log(arr); } run();
小小需求包含以下知识点:
这些代码是刚刚修正后整理过写的。
当时有点慌,写的一团糟。
连怎么从后往前切字符串都想不起来了。
并且没有实现数据合法检查。唉。
最后还问了下算法,时间复杂度和空间复杂度。
时间复杂度
空间复杂度
也没有答出来。。赶紧学学。
记一次面试题
需求
需要写一个模块,生成N个M位的纯数字手机验证码,并且这N个字符串不能重复。
需求很简单,但还是有点陷阱的。
代码
分析
小小需求包含以下知识点:
后记
这些代码是刚刚修正后整理过写的。
当时有点慌,写的一团糟。
连怎么从后往前切字符串都想不起来了。
并且没有实现数据合法检查。唉。
最后还问了下算法,
时间复杂度
和空间复杂度
。也没有答出来。。赶紧学学。