关于递归的问题

「已注销」 2016-10-07 06:44:26
...全文
264 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bree06 2016-10-08
  • 打赏
  • 举报
回复
把算式(a*31+b)*31+c解出来得到a*31^2 + b*31^1 + c*31^0这个算式正好就是java中String的hashcode计算式. 换句话说对于abcd...n字符串的((((a*31+b)*31+c)*31+...)*31+n其实就是字符串abcd...n的hashcode值. 也就是"abcde...n".hashCode() 但是题目明确说可能超过32位, 考虑使用64位整数. 所以我们只需要将int换为long即可.
public static long hashCode(String str) {
    long h = 0l;
    char val[] = str.toCharArray();
    for (int i = 0; i < val.length; i++) {
        h = 31 * h + val[i];
    }
    return h;
}
事实上abcdefghijklmn这个计算出来的值也超过了long, 只能转为double
孑吾 2016-10-08
  • 打赏
  • 举报
回复
自由自在_Yu 2016-10-08
  • 打赏
  • 举报
回复
引用 1 楼 bree06 的回复:
把算式(a*31+b)*31+c解出来得到a*31^2 + b*31^1 + c*31^0这个算式正好就是java中String的hashcode计算式. 换句话说对于abcd...n字符串的((((a*31+b)*31+c)*31+...)*31+n其实就是字符串abcd...n的hashcode值. 也就是"abcde...n".hashCode() 但是题目明确说可能超过32位, 考虑使用64位整数. 所以我们只需要将int换为long即可.
public static long hashCode(String str) {
    long h = 0l;
    char val[] = str.toCharArray();
    for (int i = 0; i < val.length; i++) {
        h = 31 * h + val[i];
    }
    return h;
}
事实上abcdefghijklmn这个计算出来的值也超过了long, 只能转为double

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧