Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- import java.util.List;
- class Scratch {
- /** https://stackoverflow.com/questions/31258430/java-convert-int-to-smallest-representation-as-ranges */
- public static void main(String[] args) {
- List<Integer> array = new java.util.ArrayList<Integer>();
- System.out.println(getRange(array));
- array.add(1);
- System.out.println(getRange(array));
- array.addAll(java.util.Arrays.asList(new Integer[]{3, 5, 4, 8, 9, 10}));
- System.out.println(getRange(array));
- array.add(2);
- System.out.println(getRange(array));
- array.add(15);
- System.out.println(getRange(array));
- /** output
- 1
- 1,3-5,8-10
- 1-5,8-10
- 1-5,8-10,15
- */
- }
- public static String getRange(List<Integer> array) {
- Integer[] nums = array.toArray(new Integer[array.size()]);
- Arrays.sort(nums);
- StringBuilder sb = new StringBuilder();
- if (nums.length == 0) return sb.toString();
- int begin = nums[0], end = nums[0];
- for (int cur : nums)
- if (cur - end <= 1)
- end = cur;
- else {
- appendRange(sb, begin, end);
- begin = end = cur;
- }
- appendRange(sb, begin, end);
- return sb.substring(1);
- }
- private static void appendRange(StringBuilder sb, int begin, int end) {
- sb.append(",").append(begin);
- if (end != begin)
- sb.append("-").append(end);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement