注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿飘的博客

十里平湖霜满天 寸寸青丝愁华年

 
 
 

日志

 
 

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

2012-01-03 18:27:10|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
看了网上的短网址算法,表示很有意思,其中最中意的还是永远不重复的短网址算法。
步骤:
   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;
    }
}
  评论这张
 
阅读(5229)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017