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);
}
}
Comments
0 B
|👍
/👎