全组合(高效)
来源:互联网 发布:%20什么意思网络用语 编辑:程序博客网 时间:2024/06/14 09:06
- java中有三种移位运算符:
- << : 左移运算符,num << 1,相当于num乘以2
- >> : 右移运算符,num >> 1,相当于num除以2
- >>> : 无符号右移,忽略符号位,空位都以0补齐
- >>>运算符高位补0
- 移位操作符作用在int上,当操作数不满足条件时,java会做强制类型转换
- 可以进行移位的类型:long,int,short,byte,char
- 在网上看到的一个程序,使用移位运算符生成全组合(很棒):
package com.set.test;public class SetTest { public static void main(String[] args) { String str[] = { "A", "B", "C", "D", "E" }; int nCnt = str.length; int nBit = (0xFFFFFFFF >>> (32 - nCnt)); for (int i = 1; i <= nBit; i++) { for (int j = 0; j < nCnt; j++) { if ((i << (31 - j)) >> 31 == -1) { System.out.print(str[j]); } } System.out.println(""); } }}
上面的程序中if判断出不太好理解,其实就是把最低位移动到符号位上进行判断,下面是自己实现的一个清晰一点的程序,效率低点:
生成1-4的全组合:
public class Main { public static void main(String[] args) { int[] data = new int[4]; int temp = 0; for (int i = 0; i < data.length; i++) data[i] = i+1; int circle = (int)Math.pow(2,data.length); for (int i = 0; i < circle; i++) { temp = i; for (int j = 0; j < data.length; j++) { if (temp % 2 == 1) { //看最低位是否是1 System.out.print(data[j]+ " "); } temp = temp >> 1; //移除最低位 } System.out.println(); } }}
参考
http://www.jianshu.com/p/a6e3c980e932
http://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html
- http://www.jianshu.com/p/0236b51b903f
阅读全文
0 0
- 全组合(高效)
- 高效全组合算法
- 高效全组合算法
- 高效全组合算法实现
- 全组合
- 全组合
- 全组合
- 全组合 全排列
- 全组合(可包含重复字符)
- 全组合(可包含重复字符)
- 数字序列全组合(递归)
- 全排列和全组合
- 全组合与全排列
- 全组合和全排列
- 全组合 与全排列
- 全组合 递归算法~
- 全组合算法
- C++ 实现全组合
- 梆梆企业版加固技术之防篡改剖析
- 设计模式六大准则
- C#学习笔记之——一些练习
- YOLO计算验证集Acc
- 在Word指定位置插入富文本域值(html文本)
- 全组合(高效)
- 程序员の自我修养《论语》全文收藏
- C语言宏定义,内置宏的用法
- JavaScript中的内置对象
- PclZIP使用文档
- ios ipv6 支持
- 主存与cache间的地址映射
- Spring Boot整合Dubbo
- 揭秘 HashMap 实现原理(Java 8)