【LeetCode】228.汇总区间

题目

给定一个  无重复元素 的 有序 整数数组 nums 。

返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

示例 1:

输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

示例 2:

输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]
解释:区间范围是:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"

提示:

  • 0 <= nums.length <= 20
  • -2^31 <= nums[i] <= 2^31 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列

解答

源代码

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<>();

        if (nums.length == 0) {
            return res;
        }
        
        String temp;
        int left = nums[0];

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] != nums[i - 1] + 1) {
                if (nums[i - 1] == left) {
                    temp = "" + left;
                    res.add(temp);
                } else {
                    temp = left + "->" + nums[i - 1];
                    res.add(temp);
                }

                left = nums[i];
            }
        }

        if (nums[nums.length - 1] == left) {
            temp = "" + left;
            res.add(temp);
        } else {
            temp = left + "->" + nums[nums.length - 1];
            res.add(temp);
        }

        return res;
    }
}

总结

很笨蛋的方法,一个个遍历,不连续的地方就切开,前面形成一个区间。

猜你喜欢

转载自blog.csdn.net/qq_57438473/article/details/132511576