Giả sử chúng ta có một số nguyên, có các chữ số liên tiếp nếu và chỉ khi mỗi chữ số trong số đó nhiều hơn chữ số trước đó một chữ số. Chúng ta phải tìm một danh sách được sắp xếp gồm tất cả các số nguyên trong phạm vi [thấp, cao] bao gồm các chữ số liên tiếp. Vì vậy, nếu low =100 và high =300, thì đầu ra sẽ là [123,234]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- tạo res một mảng
- cho tôi trong phạm vi từ 1 đến n
- cho j:=1, cho đến khi j + i - 1 <=9
- x:=0
- cho k trong phạm vi từ 0 đến i - 1
- x:=10x + (j + k)
- nếu thấp
- cho j:=1, cho đến khi j + i - 1 <=9
- trả lại ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> sequentialDigits(int low, int high) { vector <int> ans; for(int i = 1; i <= 9; i++){ for(int j = 1; j + i - 1 <= 9; j++){ int x = 0; for(int k = 0; k < i; k++){ x = (x*10) + (j + k); } if(low <= x && x <= high){ ans.push_back(x); } } } return ans; } }; main(){ Solution ob; print_vector(ob.sequentialDigits(500, 5000)); }
Đầu vào
500 5000
Đầu ra
[567, 678, 789, 1234, 2345, 3456, 4567, ]