快手面试代码题
题一 leetcode 168 & 171:
A,B,C,...,Z,AA,AB,...,AZ,BA,...,ZZZ,AAAA.... 求第i个字符串
string solve(int num) {
string ans;
while(num--) { // 将0~25映射到‘A’~‘Z’
int val = num%26;
ans += 'A'+val;
num /= 26;
}
reverse(ans.begin(), ans.end());
return ans;
}
题二
已知a数组大小为N,求b数组
b[i] = a[0]a[1]...a[i-1a[i+1]...a[N-1]
O(n)时间复杂度,O(1)空间复杂度。
要求除去循环所用i,无其它额外变量内存。
void solve(int *a, int *b, int N) {
int i;
b[0] = 1;
for(i = 1 ; i < N; i++)
b[i] = b[i-1]*a[i-1];
b[0] = a[--i];
for(--i; i > 0; i--) {
b[i] *= b[0];
b[0] *= a[i];
}
}
诸神对凡人心生艳羡,厌倦天堂。