【Lintcode】1665. Calculate Number

記錄演算法發表於2020-12-04

題目地址:

https://www.lintcode.com/problem/calculate-number/description

給定一個十進位制數 x x x,先將其轉化為二進位制,然後返回一個陣列 A A A,使得 A [ 0 ] A[0] A[0]是其二進位制表示一共多少個 1 1 1,後面依次是 x x x從左到右第幾個數是 1 1 1,從 1 1 1開始計數。

程式碼如下:

import java.util.ArrayList;
import java.util.List;

public class Solution {
    /**
     * @param num: the num
     * @return: the array subject to the description
     */
    public int[] calculateNumber(int num) {
        // Write your code here.
        int pos = 0;
        List<Integer> list = new ArrayList<>();
        while (num != 0) {
            if ((num & 1) == 1) {
                list.add(pos);
            }
            
            num >>= 1;
            pos++;
        }
        
        int[] res = new int[list.size() + 1];
        res[0] = list.size();
        for (int i = 0; i < list.size(); i++) {
            res[i + 1] = list.get(list.size() - 1) - list.get(list.size() - 1 - i) + 1;
        }
        
        return res;
    }
}

時空複雜度 O ( log ⁡ x ) O(\log x) O(logx)

相關文章