力扣简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 }

 

posted @ 2022-06-01 15:41  Ssshiny  阅读(43)  评论(0)    收藏  举报