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

来源:互联网 发布:三国群英传mac版 编辑:程序博客网 时间:2024/05/16 02:05

为了避免短网址的重复,可以将短网址看成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>



0 0
原创粉丝点击