您现在的位置:首页 >> 前端 >> 内容

分享一个面试遇到的算法题

时间:2018/6/29 14:33:22 点击:

  核心提示:1. 两个整数求和String a = 893333.....3333;String b = 349......999;求 a + b;由于数字太长,只能存在String 里,不能整体转成int/lo...

1. 两个整数求和

String a = "893333.....3333";

String b = "349......999";

求 a + b;

由于数字太长,只能存在String 里,不能整体转成int/long来加,只能一位一位的转成int来加,注意进位。

用一个for循环按每一位做加法,最后输出到一个String里。

/**

*  如何将char类型的数字转换成int型的数字

*  StringBuffer 追加时,可以 在前面 追加吗

* @param a

* @param b

* @return

*/

public static String sumLargeInt(String a,String b){

char[] a1 = a.toCharArray();

char[] a2 = b.toCharArray();

int i1 = a1.length;

int i2 = a2.length;

int i11 = 0;//记录每次取出来的数

int i22 = 0;//

StringBuffer sb = new StringBuffer();

int shi = 0;//记录十位

for (int i = 0; i < (i1>i2?i1:i2); i++) {

int t1 = i1 - i - 1;

int t2 = i2 - i - 1;

if(t1>=0){

i11 = a1[t1] - '0';

}else{

i11 = 0;

}

if(t2>=0){

i22 = a2[t2] - '0';

}else{

i22 = 0;

}

System.out.println(i11 + "   " + i22);

int temp = i11 + i22 + shi;

if(temp>=10){

sb.insert(0, temp%10);

shi = 1;

}else{

sb.insert(0,temp);

shi = 0;

}

}

//当时没有考虑到这种情况 两个数位数相等的时候, 在进一位没有考虑到

if(shi>0){

sb.insert(0,shi);

}

return sb.toString();

}

2. 一个字符串去重,输出结果保持顺序。

举例:输入 String a = "ABCCC";

            输出 deduplicate(a) = "ABC";

            输入 String a = "abbbcdeffffgacde";

            输出 deduplicate(a) = "abcdefg";

       /**

* 用 LinkedHashMap 对字符串去重

* @param str

* @return

*/

private static String test(String str) {

        Map<Object,Object> maps = new LinkedHashMap();

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < str.length(); i++) {

            char charAt = str.charAt(i);

            if(!maps.containsValue(charAt)){

            System.out.println(charAt);

            maps.put(charAt, charAt);

            };

        }

        Set<Object> keySet = maps.keySet();

        for (Object string : keySet) {

        sb.append(string);

        }

        return sb.toString();

    }

作者:网络 来源:简单快乐的博客