87.Summary Ranges

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"].

分析:根据给定的有序的数组,找出各个连续段的范围,以list的形式返回。
  falg为false时表示当前的数组单个连续,为true时表示多个连续.
  当有多个数字连续时,则在当前String中追加"->"和这一阶段的最后一个元素。
  当时单个数字时,则不用加 "->"。

/**
	 * 根据给定的有序的数组,找出各个连续段的范围,以list的形式返回。
	 * falg为false时表示当前的数组单个连续,为true时表示多个连续.
	 * 当有多个数字连续时,则在当前String中追加"->"和这一阶段的最后一个元素。
	 * 当时单个数字时,则不用加 "->"。
	 */
	 public List<String> summaryRanges(int[] nums) {
		 List<String> list = new ArrayList<String>();
		 int len = nums.length;
		 if(len == 0){
			 return list;
		 }
		 boolean flag = false;//falg为false时表示当前的数组单个连续,为true时表示多个连续
		 StringBuffer sb = new StringBuffer();/*存储每一段的内容*/		 
		 for(int i=0;i<len;){
			 sb.append(nums[i]);//找到sb开头的元素
			 /*找下一个连续的子数组*/
			 while(i<len && nums[i]+1==nums[i+1]){
				 flag=true;
				 i++;
			 }
			 /*判断是否这次为多个数字连续*/
			 if(flag){
				 sb.append("->");
				 sb.append(nums[i]);
			 }
			 flag=false;//falg置为false,准备下一次循环
			 i++;
			 list.add(new String(sb));
			 sb.delete(0, sb.length());
		 }
	        return list;
	    }

仔细分析,认真代码。

你可能感兴趣的:(87.Summary Ranges)