Skip to content

Latest commit

 

History

History
186 lines (147 loc) · 4.41 KB

File metadata and controls

186 lines (147 loc) · 4.41 KB

English Version

题目描述

给定一个  无重复元素 的 有序 整数数组 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
  • -231 <= nums[i] <= 231 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列

解法

Python3

class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        def make(nums, i, j):
            return str(nums[i]) if i == j else f'{nums[i]}->{nums[j]}'

        i = j = 0
        n = len(nums)
        res = []
        while j < n:
            while j + 1 < n and nums[j] + 1 == nums[j + 1]:
                j += 1
            res.append(make(nums, i, j))
            i = j + 1
            j = i
        return res

Java

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<>();
        for (int i = 0, j = 0, n = nums.length; j < n;) {
            while (j + 1 < n && nums[j] + 1 == nums[j + 1]) {
                ++j;
            }
            res.add(make(nums, i, j));
            i = j + 1;
            j = i;
        }
        return res;
    }

    private String make(int[] nums, int i, int j) {
        return i == j ? String.valueOf(nums[i]) : String.format("%d->%d", nums[i], nums[j]);
    }
}

C++

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> res;
        for (int i = 0, j = 0, n = nums.size(); j < n;) {
            while (j + 1 < n && nums[j] + 1 == nums[j + 1]) ++j;
            res.push_back(make(nums, i, j));
            i = j + 1;
            j = i;
        }
        return res;
    }

    string make(vector<int>& nums, int i, int j) {
        return i == j ? to_string(nums[i]) : to_string(nums[i]) + "->" + to_string(nums[j]);
    }
};

Go

func summaryRanges(nums []int) []string {
	var res []string
	for i, j, n := 0, 0, len(nums); j < n; {
		for j+1 < n && nums[j]+1 == nums[j+1] {
			j++
		}
		res = append(res, make(nums, i, j))
		i = j + 1
		j = i
	}
	return res
}

func make(nums []int, i, j int) string {
	if i == j {
		return strconv.Itoa(nums[i])
	}
	return strconv.Itoa(nums[i]) + "->" + strconv.Itoa(nums[j])
}

C#

public class Solution {
    public IList<string> SummaryRanges(int[] nums) {
        var res = new List<string>();
        for (int i = 0, j = 0, n = nums.Length; j < n;)
        {
            while (j + 1 < n && nums[j] + 1 == nums[j + 1])
            {
                ++j;
            }
            res.Add(make(nums, i, j));
            i = j + 1;
            j = i;
        }
        return res;
    }

    public string make(int[] nums, int i, int j) {
        return i == j ? nums[i].ToString() : string.Format("{0}->{1}", nums[i], nums[j]);
    }
}

...