Question
Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7]
Output: [“0->2”,”4->5”,”7”]
Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
public List<String> summaryRanges(int[] nums) { List<String> result = new ArrayList<>(); if (nums.length == 0) { return result; } int start = nums[0]; for (int i = 1; i < nums.length; i++) { if (nums[i] == nums[i-1] + 1) { continue; }else { if (nums[i-1] == start) { add(start, start, result); }else { add(start, nums[i-1], result); } start = nums[i]; } } if (nums[nums.length-1] == start) { add(start, start, result); }else { add(start, nums[nums.length-1], result); } return result; }
public void add(int start, int end, List<String> result) { StringBuilder sb = new StringBuilder(); if (end == start) { sb.append(start); result.add(sb.toString()); }else { sb.append(start); sb.append("->"); sb.append(end); result.add(sb.toString()); } }
|