面试遇到的算法题1

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();
    }

为什么用LinkedHashMap 

Map.keySet()排序问题

https://blog.csdn.net/u011377786/article/details/46491275


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值