# 20200303 Message A-Z A - 1 B - 2 C - 3 . . . Z - 26 "123" -> 3 [A, B, C], [L, C], [A, W] "103" -> 1 [J, C] "023" -> 1 [W] dp = [0, 0, 0, 0] dp = [1, 1, 2, 3] dp = [0, 0, 0, 0] dp = [1, 1, 1, 1] "12345" [0,0,0,0,0,0] [1,1,2,3,3,3] "12312" [0, 0, 0, 0, 0, 0] [1, 1, 2, 3, 3, 6] 123 -> 1, 12 1231 -> 12, 123 12, 23, 31, ``` dp[0] = 1 dp[1] = s.charAt(0) != '0' ? 1 : 0; // 103 for(int i = 2; i <= length; i++) { int first = Integer.valueOf(s.substring(i-1, i)); int second = Integer.valueOf(s.substring(i-2, i)); if (first > 0 && first <= 9) { dp[i] += dp[i-1]; } if (second >= 10 && second <= 26) { dp[i] += dp[i-2]; } } ``` arr = [-1, 0, 1, 2, -1, -4] output = [-1, 0, 1], [-1, -1, 2] arr = [-4, -1, -1, 0, 1, 2] a s f ``` public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> result = new ArrayList() for (int i = 0; i < nums.length - 2; i++) { int slow = i + 1; int fast = i + 2; while(fast < nums.length) { if (nums[i] + nums[slow] + nums[fast] == 0) { List<Integer> ans = new ArrayList(); ans.add(nums[i]); ans.add(nums[i+1]); ans.add(nums[i+2]); } if (fast == nums.length - 1) { slow++; fast = slow + 1; } fast++; } } return result; } ```