快手面试代码题

题一 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];
    }
}
posted @ 2019-10-13 23:52  我在地狱  阅读(750)  评论(0编辑  收藏  举报