在字符串列表中查找字符串时,Trie 树实际上并没有做得很好。它对要处理的字符串有非常严格的要求。
首先,字符串中包含的字符集不能太大。前面我们提到过,如果字符集太大,会浪费很多存储空间。即使可以优化,也要付出牺牲查询和插入效率的代价。 其次,字符串的前缀要重叠很多,否则占用的空间会大很多。 第三,如果你想用 Trie 树解决问题,你必须从头开始实现 Trie 树并使其没有错误。这是一种使简单问题过于复杂的工程,通常不推荐使用。 第四,我们知道由指针串在一起的数据块是不连续的,而Trie树使用指针,所以它对缓存不友好,性能会受到影响。 在字符串列表中查找字符串时,Trie 树实际上并没有做得很好。它对要处理的字符串有非常严格的要求。 在字符串列表中查找字符串时,Trie 树实际上并没有做得很好。它对要处理的字符串有非常严格的要求。 package io.github.dunwu.algorithm.list; import org.junit.jupiter.api.Assertions; /**
- @author <a href="mailto:forbreak@163.com">Zhang Peng</a>
- @since 2020-06-09
*/ public class 二进制链表转整数 { public static void main(String[] args) { ListNode head = ListUtil.buildList(1, 0, 1); System.out.println(ListUtil.toList(head)); int result = getDecimalValue(head); Assertions.assertEquals(5, result); head = new ListNode(0); System.out.println(ListUtil.toList(head)); result = getDecimalValue(head); Assertions.assertEquals(0, result); head = new ListNode(1); System.out.println(ListUtil.toList(head)); result = getDecimalValue(head); Assertions.assertEquals(1, result); head = ListUtil.buildList(1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0); System.out.println(ListUtil.toList(head)); result = getDecimalValue(head); Assertions.assertEquals(18880, result); } /**
- <code>二进制链表转整数</code> 算法实现
- <p>
- 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。
- <p>
- 请你返回该链表所表示数字的 十进制值 。
- <p>
- 示例 1:
- <pre>
- 输入:head = [1,0,1]
- 输出:5
- 解释:二进制数 (101) 转化为十进制数 (5)
- </pre>
- <p>
- 示例 2:
- <pre>
- 输入:head = [0]
- 输出:0
- </pre>