Menu Sidebar
Menu

August 2015

[LintCode] Count and Say

public String countAndSay(int n) { // Write your code here String s = “1”; for(int i = 1; i < n; i++) { StringBuffer sb = new StringBuffer(); int count = 1; for(int j = 1; j < s.length(); j++) { if(s.charAt(j) == s.charAt(j-1)) count++; else{ sb.append(count); sb.append(s.charAt(j-1)); count = 1; } } sb.append(count); sb.append(s.charAt(s.length()-1)); […]

Add Digits 数根与数的韧性

LeetCode居然来了数学题. 这题的本意很明显就是求数根.求数根,先要知道什么是数的韧性. 定义数的(+)韧性(Additive Persistence),为把一个数字的每个digit分别相加,得到新的数后继续这个操作,直到留下仅剩一个digit. 定义这个digit为数根. 上边的是求数根的简便运算, 由以上公式可以看出, 数的韧性的序列前几位为: 0, 10, 19, 199… 数根的应用不是很广, 一般有两个, 一个是用数根的性质: 数字本身的加减乘除等于其表达式对应的数根的加减乘除, 这个可以快速检验运算的正确性. 第二个应用是, 就是快速求同余(两个数对同一个数求余数, 如果相同, 即为同余).

[LintCode] Segment Tree Query II

public int query(SegmentTreeNode root, int start, int end) { // write your code here if(root == null || root.end < start || root.start > end) return 0; if(root.start == root.end) return root.count; return query(root.left, start,end)+ query(root.right, start, end); }

[LintCode] Segment Tree Query

public int query(SegmentTreeNode root, int start, int end) { // write your code here if(root == null || root.start > end || root.end < start) return 0; if(root.start == root.end) return root.max; return Math.max(query(root.left,start,end),query(root.right,start,end)); }

[LintCode] Segment Tree Build

public SegmentTreeNode build(int start, int end) { // write your code here if(start > end) return null; SegmentTreeNode root = new SegmentTreeNode(start, end); // root if(start < end) { int mid = start + (end – start) / 2; root.left = build(start, mid); root.right = build(mid+1, end); } return root; }

[LintCode] Triangle Count

public int triangleCount(int S[]) { // write your code here int res = 0; if(S.length == 0 || S == null) return res; Arrays.sort(S); for(int i = S.length – 1; i > 0; i–) { int l = 0; int r = i – 1; while(l < r) { if(S[l] + S[r] > S[i]){ res […]

[LintCode] Reverse Integer

public int reverseInteger(int n) { // Write your code here int num = Math.abs(n); int res = 0; while(num != 0) { if(res > (Integer.MAX_VALUE – num%10) / 10) return 0; // corn case; res = res*10 + num %10; num /= 10; } return n > 0 ? res : -res; }

Newer Posts
Older Posts

书脊

这青苔碧瓦堆, 俺曾睡风流觉, 将五十年兴亡看饱.

August 2015
M T W T F S S
 12
3456789
10111213141516
17181920212223
24252627282930
31