</pre>比如,求4位二进制数,就是要求出 [1000, 1100, 1010, 1110, 1001, 1101, 1011, 1111]<p></p><p>开头第一位只能是1,因为0001是1 ,是一位二进制数</p><p>当时想到的方法是 n为二进制,数字范围是2的N-1次方到2的N次方-1 那么写一个转换成二进制的函数,遍历一遍调用这个函数,就可以求出来了</p><p>方法二:利用递归实现 最高位特殊考虑,除最高位以外,每个位都是在上一次的前面加上0 或者 1 ,比如而一位是0和1,二位是00 10 01 11 ,如果要求的是三位,那么三位是在前面基础上加1 ,而不是 1和0</p><p>下面代码包含这两种方法的实现</p><p></p><pre code_snippet_id="1896655" snippet_file_name="blog_20160923_2_4325497" name="code" class="java">import java.util.ArrayList;
import java.util.Stack;
public class Nbits {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> result1=getNbits(4);
System.out.println("result1=="+result1);
ArrayList<String> result2=getNbits(4,4);
System.out.println("result2=="+result2);
}
//方法二
public static ArrayList<String> getNbits(int n,int start){
ArrayList<String> al=new ArrayList<>();
if(n==1){
al.add("0");
al.add("1");
return al;
}
ArrayList<String> all=getNbits(n-1, start);
for(int i=0;i<all.size();i++){
if(n!=start)
al.add("0"+all.get(i));
al.add("1"+all.get(i));
}
return al;
}
//方法一
public static ArrayList<String> getNbits(int n){
ArrayList<String> al=new ArrayList<>();
for(int i=(int)Math.pow((double)2,(double)n-1);i<(int)Math.pow((double)2,(double)n);i++){
al.add(convertTobit(i));
}
return al;
}
public static String convertTobit(int n){
StringBuilder sb=new StringBuilder("");
int a=n,b;
Stack<String> stk=new Stack<>();
while(a/2!=0){
b=a%2;
stk.push(b+"");
a/=2;
}
stk.push(a+"");
while(!stk.empty()){
sb.append(stk.pop());
}
return sb.toString();
}
}
面试算法题:求出所有N位的二进制数
原文作者:五条龙
原文地址: https://blog.csdn.net/qq_18344939/article/details/52639024
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_18344939/article/details/52639024
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。