题目地址:
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)。