Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Stepping Numbers in C++
Suppose we have two integers low and high, we have to find and show a sorted list of all the Stepping Numbers in the range [low, high] inclusive. A Stepping Number is an integer means all of its adjacent digits have an absolute difference of exactly 1. For example, 321 is a Stepping Number but 421 is not. So if the input is like low := 0 and high := 21, then the result will be [0,1,2,3,4,5,6,7,8,9,10,12,21]
To solve this, we will follow these steps −
- create one array temp
- make one method called solve(), this will take high, seed and len. the len is initially 0
- if seed > high, then return
- insert seed into the temp array
- if seed is 0, then
- for i in range 1 to 9, perform solve(high, i, 1)
- otherwise
- lastDigit := seed mod 10
- if lastDigit >= 1 and len + 1 <= 10, then solve(high, (seed*10) + lastDigit – 1, len + 1)
- if lastDigit <= 8 and len + 1 <= 10, then solve(high, (seed*10) + lastDigit + 1, len + 1)
- The main method will be like −
- solve(high, 0, 0)
- sort the temp array
- make one array ans
- for i in range 0 to temp size – 1
- if temp[i] >= low, then insert temp[i] into ans
- return ans
Let us see the following implementation to get better understanding −
Example
#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;
}
typedef long long int lli;
class Solution {
public:
vector <lli> temp;
void solve(int high,lli seed=0, int len =0){
if(seed>high){
return;
}
temp.push_back(seed);
if(!seed){
for(int i =1;i<=9;i++){
solve(high,i,1);
}
} else {
int lastDigit = seed%10;
if(lastDigit>=1 && len+1<=10)
solve(high, (seed*10) + lastDigit-1,len+1);
if(lastDigit<=8 && len+1<=10)
solve(high, (seed*10) + lastDigit+1,len+1);
}
}
vector<int> countSteppingNumbers(int low, int high) {
solve(high);
sort(temp.begin(),temp.end());
vector <int> ans;
for(int i =0;i<temp.size();i++){
if(temp[i]>=low)ans.push_back(temp[i]);
}
return ans;
}
};
main(){
Solution ob;
print_vector(ob.countSteppingNumbers(0,40));
}
Input
0 40
Output
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, ]
Advertisements