短网址算法——之 10进制与62进制转换

为了避免短网址的重复,可以将短网址看成62进制的数


<span style="font-size:18px;">步骤:
   1,准备一个被打乱的数组,存放A-Za-Z0-9这62个字符
   2.预先产生一个网址ID,将这个ID通过 _10_to_62 解析转换成62进制的短网址符。
   3.存储ID,短网址code,页面URL
算法如下,很简单,时间效率也比较高,甚至,有了存储的ID,要不要存储短网址code都无所谓,
这个算法时间复杂度本来就是n,而一般的短网址长度也就1~7位,时间复杂度也可以算作O(1)常量了。
import java.util.Stack;

/**
 * @author Administrator
 *
 */
public class Main {
    public static void main(String[] args) {
        System.out.println(36526445);
        System.out.println(_10_to_62(36526445));
        System.out.println(_62_to_10(_10_to_62(36526445)));
    }

    public static final char[] array={'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m','0','1','2','3','4','5','6','7','8','9','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'};

    public static String _10_to_62(long number){
            Long rest=number;
            Stack<Character> stack=new Stack<Character>();
            StringBuilder result=new StringBuilder(0);
            while(rest!=0){
                stack.add(array[new Long((rest-(rest/62)*62)).intValue()]);
                rest=rest/62;
            }
            for(;!stack.isEmpty();){
                result.append(stack.pop());
            }
            return result.toString();

    }

    public static long _62_to_10(String sixty_str){
        int multiple=1;
        long result=0;
        Character c;
        for(int i=0;i<sixty_str.length();i++){
            c=sixty_str.charAt(sixty_str.length()-i-1);
            result+=_62_value(c)*multiple;
            multiple=multiple*62;
        }
        return result;
    }

    private static int _62_value(Character c){
        for(int i=0;i<array.length;i++){
            if(c==array[i]){
                return i;
            }
        }
        return -1;
    }
}</span>



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值