力扣简228 汇总区间
数组 列表 字符串
整数转为字符串:Integer.toString(a)
""+a
题解是从先设i从0开始,没比较就再次加一,然后让nums[i]和nums[i-1]比较的,而且每次都在比较前看i是否越界,所以比我的好处理多了。
自己写的对于空数组和单个元素的数组没有进行特殊处理。

(其实自己还想了一下给数组后加个元素,使得特殊情况变少。没想好。)
1 package leetcode01; 2 3 import java.util.LinkedList; 4 import java.util.List; 5 6 /*给定一个无重复元素的有序 整数数组 nums 。 7 返回恰好覆盖数组中所有数字的最小有序区间范围列表。也就是说,nums的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums的数字 x。 8 列表中的每个区间范围 [a,b] 应该按如下格式输出: 9 "a->b" ,如果 a != b 10 "a" ,如果 a == b*/ 11 public class Solution228 { 12 public static List<String> summaryRanges(int[] nums) { 13 List<String> res=new LinkedList<String>(); 14 if(nums.length==0) { 15 return res; 16 }//最开始没写这个判空,会导致数组为空时进行判断抛出越界异常。 17 if(nums.length==1) { 18 res.add(""+nums[0]); 19 return res; 20 }//最开始这个也没写,数组只有一个元素时,执行会导致数组越界异常。 21 for(int i=0;i<nums.length-1;i++) { 22 int flag=i; 23 while(nums[i+1]==nums[i]+1) { 24 i++; 25 if(i==nums.length-1) { 26 break; 27 } 28 } 29 if(flag==i) { 30 res.add(""+nums[i]); 31 } 32 else 33 res.add(""+nums[flag]+"->"+""+nums[i]); 34 } 35 if(nums[nums.length-1]!=nums[nums.length-2]+1) { 36 res.add(""+nums[nums.length-1]); 37 } 38 return res; 39 } 40 41 public static void main(String[] args) { 42 // TODO Auto-generated method stub 43 int[] nums= {-1}; 44 List<String> res=summaryRanges(nums); 45 System.out.print(res); 46 } 47 /*出错案例 48 nums={} 49 nums={-1} 50 */ 51 }

浙公网安备 33010602011771号