228. Summary Ranges
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。
Вам дан sorted 配列 уникальных целых чисел nums.
Диапазон [a,b] - это множество всех целых чисел от a до b (включительно).
return наименьший sorted список диапазонов, которые покрывают все числа в 配列е точно. То есть, каждый element nums покрывается ровно одним из диапазонов, и не существует такого целого числа x, чтобы x находился в одном из диапазонов, но не находился в nums.
Каждый диапазон [a,b] в списке должен быть представлен в формате:
"a->b" если a != b
"a" если a == b
例
Input: nums = [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: The ranges are:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"
C# 解法
照合済み/オリジナルpublic class Solution {
public IList<string> SummaryRanges(int[] nums) {
var ranges = new List<string>();
int i = 0;
while (i < nums.Length) {
int start = nums[i];
while (i + 1 < nums.Length && nums[i] + 1 == nums[i + 1]) {
i++;
}
if (start != nums[i]) {
ranges.Add(start + "->" + nums[i]);
} else {
ranges.Add(start.ToString());
}
i++;
}
return ranges;
}
}
C++ 解法
自動ドラフト、提出前に確認#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public vector<string> SummaryRanges(vector<int>& nums) {
var ranges = new List<string>();
int i = 0;
while (i < nums.size()) {
int start = nums[i];
while (i + 1 < nums.size() && nums[i] + 1 == nums[i + 1]) {
i++;
}
if (start != nums[i]) {
ranges.push_back(start + "->" + nums[i]);
} else {
ranges.push_back(start.ToString());
}
i++;
}
return ranges;
}
}
Java 解法
照合済み/オリジナルclass Solution {
public List<String> summaryRanges(int[] nums) {
List<String> ranges = new ArrayList<>();
int i = 0;
while (i < nums.length) {
int start = nums[i];
while (i + 1 < nums.length && nums[i] + 1 == nums[i + 1]) {
i++;
}
if (start != nums[i]) {
ranges.add(start + "->" + nums[i]);
} else {
ranges.add(Integer.toString(start));
}
i++;
}
return ranges;
}
}
JavaScript 解法
照合済み/オリジナルclass Solution {
summaryRanges(nums) {
let ranges = []
let i = 0
while (i < nums.length) {
let start = nums[i]
while (i + 1 < nums.length && nums[i] + 1 == nums[i + 1]) {
i++
}
if (start != nums[i]) {
ranges.push(`${start}->${nums[i]}`)
} else {
ranges.push(`${start}`)
}
i++
}
return ranges
}
}
Python 解法
照合済み/オリジナルclass Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
ranges = []
i = 0
while i < len(nums):
start = nums[i]
while i + 1 < len(nums) and nums[i] + 1 == nums[i + 1]:
i += 1
if start != nums[i]:
ranges.append(f"{start}->{nums[i]}")
else:
ranges.append(f"{start}")
i += 1
return ranges
Go 解法
照合済み/オリジナルpackage main
import (
"fmt"
"strconv"
)
func summaryRanges(nums []int) []string {
ranges := []string{}
i := 0
for i < len(nums) {
start := nums[i]
for i+1 < len(nums) && nums[i]+1 == nums[i+1] {
i++
}
if start != nums[i] {
ranges = append(ranges, strconv.Itoa(start)+"->"+strconv.Itoa(nums[i]))
} else {
ranges = append(ranges, strconv.Itoa(start))
}
i++
}
return ranges
}
func main() {
nums := []int{0, 1, 2, 4, 5, 7}
fmt.Println(summaryRanges(nums))
}
Vacancies for this task
有効な求人 with overlapping task tags are 表示.
有効な求人はまだありません。