以下内容是平时的积累和收藏。共享,同进步。
import java.util.ArrayList;
import java.util.List;
public class Test3 {
/**
* 返回任意一个数的阶乘
* @param num
* @return
*/
public static int factorial(int num)
{
//递归
if(num == 1)
{
return 1;
}
return num*factorial(num-1);
}
//----------------------数组升序排列
/**
* 二分查找方法 非递归
* @param dataset 目标数组 必须是排好序的
* @param data 目标元素
* @return 索引
*/
public static int binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2; //二分数组
if(data <dataset[midIndex]) { //前半段查找
endIndex = midIndex-1; //重新设置结束索引
} else if(data>dataset[midIndex]) { //后半段
beginIndex = midIndex+1;
}else {
return midIndex; //当相等的时候,返回
}
}
return -1;
}
/**
* 递归二分查询
* @param dataset
* @param data
* @param beginIndex
* @param endIndex
* @return
*/
public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int middleIndex = (beginIndex+endIndex)/2;
if(data<dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
if(data<dataset[middleIndex]){
return binarySearch(dataset, data,beginIndex,middleIndex-1);
}else if(data>dataset[middleIndex]){
return binarySearch(dataset, data,middleIndex+1,endIndex);
}else{
return middleIndex;
}
}
/**
* 求最大公约数
* @param args
*/
public static int divisor(int a,int b){
if(a%b==0){
return b;
}else{
return divisor(b, a%b);
}
}
/**
* 求最小公倍数
* @param a
* @param b
* @return
*/
public static int getLCM(int a,int b){
int result = a*b/divisor(a, b);
return result;
}
/**
* 全排列
* @param l
* @return
*/
public static List order(List<String> l){//l中的元素为一个值的字符串
List<String> list = new ArrayList<String>();
List<String> allList = new ArrayList<String>();
for(String s : l){
if(allList.size()==0){
allList.add(s);
}else{
for(int i = 0;i<allList.size();i++){
String tmep = allList.get(i);
tmep = s+tmep;
String comStr = tmep;
list.add(tmep);
tmep = changeStr(tmep);
while(!comStr.equals(tmep)){
list.add(tmep);
tmep = changeStr(tmep);
}
}
allList.clear();
allList.addAll(list);
list.clear();
}
}
return allList;
}
public static String changeStr(String s ){
StringBuffer sb = new StringBuffer();
sb.append(s.substring(1,s.length())).append(s.substring(0,1));
return sb.toString();
}
public static void main(String[] args) {
/**
* 二分查找---非递归
*/
int[] dataset = {2,3,4,5};
int data = 4;
int result = binarySearch(dataset, data);
System.out.println(result);
/**
* 递归
*/
int[] dataset2 = {2,3,4,5};
int data2 = 5;
int result2 = binarySearch(dataset2, data2);
System.out.println("result2-------------------"+result2);
/**
* 返回任意一个数的阶乘
*/
System.out.println(factorial(4));
/**
* 打印乘法表
*/
for(int i =1;i<10;i++){
for(int j=1;j<10;j++){
if(j<=i){
System.out.print(j+"*"+i+"="+i*j);
System.out.print(" ");
}
}
System.out.println();
}
/**
* 打印乘法表2
*/
for (int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j){
i=0;
j++;
System.out.println();
}
}
/**
* 最大公约数
*/
System.out.println("最大公约数------------------"+divisor(32,24));
/**
* 最小公倍数
*/
System.out.println("最小公倍数----------------"+getLCM(32, 24));
/**
* 全排列
*/
List<String> l = new ArrayList<String>();
List<String> resultList = new ArrayList<String>();
l.add("1");
l.add("4");
l.add("3");
resultList = order(l);
System.out.println(resultList);
}
}