/*
* 实现斐波拉切数列
*/
public class feibolaqi {
public static void main(String[] args) {
for(int i = 1; i < 10 ; i++) {
System.out.println(F(i));
}
}
//获得斐波拉切数列的第n项
public static int F(int i) {
if(i == 0) {
throw new RuntimeException("输入有误!"+ i);
}
else if(i == 2 || i == 1 ) {
return 1;
}else {
return F(i-1) + F(i-2);
}
}
}
/*
*字符串排序和去重
*/
public class QuChong {
public static void main(String[] args) {
String str = "GGHRAAERRASDDDBBCEDDFFE";//ABCEDF
//System.out.println(distinct(str));
System.out.println(sortAnddistinct(str));
}
//去重
public static String distinct(String str) {
char[] tmp = str.toCharArray();
StringBuilder sb = new StringBuilder();
Set<Character> sets = new HashSet<Character>();
for(int i=0;i<tmp.length;i++) {
if(sets.contains(tmp[i])) {
//pass
}else {
sb.append(tmp[i]);
sets.add(tmp[i]);
}
}
return sb.toString();
}
//排序去重
public static String sortAnddistinct(String str) {
char[] chars = str.toCharArray();
//排序
int len = chars.length-1;
for(int i=0;i<len;i++) {
for(int j=0;j<len--;j++) {
char tmp = chars[j];
if(chars[j] > chars[j+1]) {
chars[j] = chars[j+1];
chars[j+1] = tmp;
}
}
}
//排序后
System.out.println(String.valueOf(chars));
//去重
return distinct(String.valueOf(chars));
}
}
/*
* 实现两个超出int范围的数相加
*/
public class BigInteger {
public static void main(String[] args) {
String str1 = "00012734284";
String str2 = "00738237821";
System.out.println(add(str1,str2));
}
public static String add(String str1, String str2) {
StringBuilder res = new StringBuilder();
//同步两个参数长度
int len1 = str1.length();
int len2 = str2.length();
if(len1 == 0 || len2 ==0) {
res.append(str1 + str2);
}
else
{
if(len1 == len2) {
method(str1, str2, res, len1);
}
else if(len1 > len2) {
int le = len1 - len2;
while(le > 0) {
str2 ="0" + str2;
le--;
}
method(str1, str2, res, len1);
}
else if(len1 < len2) {
int le = len2 - len1;
while(le > 0) {
str1 ="0" + str1;
le--;
}
method(str1, str2, res, len2);
}
}
//去除开头的0
String resV = res.reverse().toString();
//查找连续
if(resV.startsWith("0")) {
int x = 0;
char[] cs = resV.toCharArray();
for(int i = 0; i< cs.length; i++) {
if(cs[i] == '0') {
x++;
}else {
break;
}
}
resV = resV.substring(x);
}
return resV;
}
public static void method(String str1, String str2, StringBuilder res, int len1) {
int tmp = 0;
for(int i = len1-1; i >= 0;i--) {
int v1 = Integer.parseInt(String.valueOf(str1.charAt(i)));
int v2 = Integer.parseInt(String.valueOf(str2.charAt(i)));
int sum = v1 + v2 + tmp;
if(sum >= 10) {
tmp = sum / 10;
int lastV = sum % 10;
res.append(lastV);
}else {
tmp = 0;
res.append(sum);
}
}
}
}
/*
* 判断一个数组中,是否存在任意两项相加等于给定的数
*/
public class Demo {
public static void main(String[] args) {
//
int[] arr = {1,2,3,4,5,6,7,8,9};
System.out.println(exist(arr,4));
System.out.println(exist2(arr,4));
}
//是否存在任意两项之和等于n
//算法的时间复杂度位o(n^2)
public static boolean exist(int[] arr,int n) {
boolean res = false;
int len = arr.length;
if(len < 2) {
return false;
}
for(int j = len-1;j>=0;j--) {
for(int i = 0; i<len; i++) {
System.out.println(arr[j] + "+" +arr[i] + "="+n +"?");
if(arr[j] + arr[i] == n && j != i) {
res = true;
break;
}
}
}
return res;
}
//算法优化
public static boolean exist2(int[] arr, int n) {
boolean res = false;
int len = arr.length;
if(len < 2) {
return res;
}
//借助HashSet
Set<Integer> sets = new HashSet<>();
for(int i=0;i<arr.length;i++) {
sets.add(arr[i]);
}
//判断是否存在
for(int i=0; i<arr.length; i++) {
if(sets.contains(n-arr[i]) && n-arr[i] != arr[i]) {
res = true;
}
}
return res;
}
}
/*
* java 中的值传递和异常处理try-catch-finally
*/
public class Demo2 {
public static void main(String[] args) {
//基本数据类型
int a = 1;
add(a);
System.out.println("方法外:"+a);
//引用数据类型
List<Integer> list = new ArrayList<Integer>();
add(list);
System.out.println("方法外:"+list);
int b = 1;
List<String> arrlist = new ArrayList<String>();
try {
arrlist.add("111");
b++;
int i = 10 /0;
}catch(Exception e) {
b++;
arrlist.add("222");
}finally {
b++;
arrlist.add("3333");
}
System.out.println("b:"+b++);
System.out.println("arrlist:"+arrlist);
}
//基本数据类型值传递
public static void add(int i) {
i++;
System.out.println("方法内:" + i);
}
//引用类型的值传递
public static void add(List<Integer> list) {
list.add(10);
System.out.println("方法内:" + list);
}
}