Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given[0,1,2,4,5,7], return["0->2","4->5","7"].
这题得分情况处理,非常麻烦,所以我多加一个数在后面,但不是真正地加。只是想像成多一个数。
例如:[0,1,2,4,5,7] =》 [0,1,2,4,5,7, MIN]
然后每次都把end指针向后移,边移边找区间。找到后加入结果然后更新start指针。
end指针会指着区间的下一个数。所以加进结果时要-1.
简洁版:
publicList<String>summaryRanges(int[] nums) {List<String> result =newArrayList<>();if (nums ==null||nums.length==0) {return result; }int start =0;// starting point of the rangeint n =nums.length;// end is next number after the end of a rangefor (int end = start +1; end <= n; end++) {if (end == n || nums[end] != nums[end -1] +1) {if (start == end -1) {// this range only consist of 1 numberresult.add(String.valueOf(nums[end -1])); } else {// this range has more than 1 numberresult.add(nums[start] +"->"+ nums[end -1]); } start = end;// after we add a range to result, we update our starting point to } }return result;}
详细版:其实就是除了第二个case以外都可以加结果
/* start : starting point of the range end: 1 slot after range need to seperate different cases. detail version*/publicList<String>summaryRanges(int[] nums) {List<String> result =newArrayList<>();if (nums ==null||nums.length==0) {return result; }int start =0;int n =nums.length;for (int end = start +1; end <= n; end++) {if (end == n) {if (start == end -1) {result.add(String.valueOf(nums[end -1])); } else {result.add(nums[start] +"->"+ nums[end -1]); } } elseif (nums[end] == nums[end -1] +1) {continue; } else {if (start == end -1) {result.add(String.valueOf(nums[end -1])); } else {result.add(nums[start] +"->"+ nums[end -1]); } } start = end; }return result;}