Giving a string with number from 1-
n
in random order, but miss 1
number.Find that number.Example
Example1
Input: n = 20 and str = 19201234567891011121314151618
Output: 17
Explanation:
19'20'1'2'3'4'5'6'7'8'9'10'11'12'13'14'15'16'18
Example2
Input: n = 6 and str = 56412
Output: 3
Explanation:
5'6'4'1'2
Notice
n <= 30
Data guarantees have only one solution
Code (Java):Data guarantees have only one solution
public class Solution { /** * @param n: An integer * @param str: a string with number from 1-n in random order and miss one number * @return: An integer */ private int sum = 0; public int findMissing2(int n, String str) { // write your code here if (n <= 0 || str == null || str.length() == 0) { return 0; } boolean[] visited = new boolean[n + 1]; findMissing2Helper(n, str, 0, 0, visited); int target = (1 + n) * n / 2; return target - sum; } private boolean findMissing2Helper(int n, String str, int startIdx, int curSum, boolean[] visited) { if (startIdx >= str.length()) { sum = curSum; return true; } for (int i = 1; i <= 2; i++) { if (startIdx + i > str.length()) { return false; } String substr = str.substring(startIdx, startIdx + i); if (substr.charAt(0) == '0') { return false; } int val = Integer.parseInt(substr); if (val <= n && !visited[val]) { visited[val] = true; boolean found = findMissing2Helper(n, str, startIdx + i, curSum + val, visited); if (found) { return true; } visited[val] = false; } } return false; } }
No comments:
Post a Comment