【Lintcode】1665. Calculate Number

题目地址:

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)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页