# Count of N digit numbers having absolute difference between adjacent digits as K

• Last Updated : 16 Dec, 2021

Given two integers N and K. The task is to count all positive integers with length N having an absolute difference between adjacent digits equal to K.

Examples:

Input: N = 4, K = 8
Output: 3
Explanation: The absolute difference between every consecutive digit of each number is 8. Three possible numbers are 8080, 1919 and 9191.

Input: N = 2, K = 0
Output: 9
Explanation: 11, 22, 33, 44, 55, 66, 77, 88, 99. The absolute difference between every consecutive digit of each number is 0.

Approach: The approach is based on recursion. Iterate over digits [1, 9], and for each digit, count the N-digit number having a difference of absolute digit as K using recursion. Following cases arrive in the recursive function call.

• Base Case: For all single-digit integers i.e. N = 1, increment answer count.
• Recursive Call: If adding digit K to the one’s digit of the number formed till now (num) does not exceed 9, then recursively call by decreasing N and making num = (num*10 + num%10 + K).

if(num % 10 + K ≤ 9)
recursive_function(10 * num + (num % 10 + K), N – 1);

• If the value of K is non-zero after all the recursive calls and if num % 10 ≥ K, then again recursively call by decreasing the N and update num to (10*num + num%10 – K).

if(num % 10 ≥ K)
recursive_function(10 * num + num % 10 – K, N – 1)

Below is the implementation of the above approach.

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// To store the count of numbers``int` `countNums = 0;` `// Function that recursively finds the``// possible numbers and append into ans``void` `checkUtil(``int` `num, ``int` `K, ``int` `N)``{``    ``// Base Case``    ``if` `(N == 1) {``        ``countNums++;``        ``return``;``    ``}` `    ``// Check the sum of last digit and k``    ``// less than or equal to 9 or not``    ``if` `((num % 10 + K) <= 9)``        ``checkUtil(10 * num +``                  ``(num % 10 + K), K, N - 1);` `    ``// If K = 0, then subtraction and``    ``// addition does not make any``    ``// difference``    ``if` `(K) {``        ` `        ``// If unit's digit greater than K``        ``if` `((num % 10 - K) >= 0)``            ``checkUtil(10 * num +``                      ``num % 10 - K, K, N - 1);``    ``}``}` `// Function to call checkUtil function``// for every integer from 1 to 9``void` `check(``int` `K, ``int` `N)``{``    ``// Loop to check for``    ``// all digits from 1 to 9``    ``for` `(``int` `i = 1; i <= 9; i++) {``        ``checkUtil(i, K, N);``    ``}``}` `// Driver Code``int` `main()``{``    ``// Given N and K``    ``int` `N = 4, K = 8;``    ``check(K, N);` `    ``// Count total possible numbers``    ``cout << countNums << endl;``    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;` `class` `GFG{` `// To store the count of numbers``static` `int` `countNums = ``0``;` `// Function that recursively finds the``// possible numbers and append into ans``static` `void` `checkUtil(``int` `num, ``int` `K, ``int` `N)``{``  ` `    ``// Base Case``    ``if` `(N == ``1``) {``        ``countNums++;``        ``return``;``    ``}` `    ``// Check the sum of last digit and k``    ``// less than or equal to 9 or not``    ``if` `((num % ``10` `+ K) <= ``9``)``        ``checkUtil(``10` `* num +``                  ``(num % ``10` `+ K), K, N - ``1``);` `    ``// If K = 0, then subtraction and``    ``// addition does not make any``    ``// difference``    ``if` `(K>``0``) {``        ` `        ``// If unit's digit greater than K``        ``if` `((num % ``10` `- K) >= ``0``)``            ``checkUtil(``10` `* num +``                      ``num % ``10` `- K, K, N - ``1``);``    ``}``}` `// Function to call checkUtil function``// for every integer from 1 to 9``static` `void` `check(``int` `K, ``int` `N)``{``  ` `    ``// Loop to check for``    ``// all digits from 1 to 9``    ``for` `(``int` `i = ``1``; i <= ``9``; i++) {``        ``checkUtil(i, K, N);``    ``}``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``  ` `    ``// Given N and K``    ``int` `N = ``4``, K = ``8``;``    ``check(K, N);` `    ``// Count total possible numbers``    ``System.out.print(countNums +``"\n"``);``}``}` `// This code contributed by shikhasingrajput`

## Python3

 `# Python program for the above approach` `# To store the count of numbers``countNums ``=` `0``;` `# Function that recursively finds the``# possible numbers and append into ans``def` `checkUtil(num, K, N):``    ``global` `countNums;``    ` `    ``# Base Case``    ``if` `(N ``=``=` `1``):``        ``countNums ``+``=` `1``;``        ``return``;` `    ``# Check the sum of last digit and k``    ``# less than or equal to 9 or not``    ``if` `((num ``%` `10` `+` `K) <``=` `9``):``        ``checkUtil(``10` `*` `num ``+` `(num ``%` `10` `+` `K), K, N ``-` `1``);` `    ``# If K = 0, then subtraction and``    ``# addition does not make any``    ``# difference``    ``if` `(K > ``0``):` `        ``# If unit's digit greater than K``        ``if` `((num ``%` `10` `-` `K) >``=` `0``):``            ``checkUtil(``10` `*` `num ``+` `num ``%` `10` `-` `K, K, N ``-` `1``);` `# Function to call checkUtil function``# for every integer from 1 to 9``def` `check(K, N):``  ` `    ``# Loop to check for``    ``# all digits from 1 to 9``    ``for` `i ``in` `range``(``1``,``10``):``        ``checkUtil(i, K, N);` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``# Given N and K``    ``N ``=` `4``;``    ``K ``=` `8``;``    ``check(K, N);` `    ``# Count total possible numbers``    ``print``(countNums);` `# This code is contributed by shikhasingrajput`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{` `// To store the count of numbers``static` `int` `countNums = 0;` `// Function that recursively finds the``// possible numbers and append into ans``static` `void` `checkUtil(``int` `num, ``int` `K, ``int` `N)``{``    ` `    ``// Base Case``    ``if` `(N == 1)``    ``{``        ``countNums++;``        ``return``;``    ``}` `    ``// Check the sum of last digit and k``    ``// less than or equal to 9 or not``    ``if` `((num % 10 + K) <= 9)``        ``checkUtil(10 * num +``                 ``(num % 10 + K), K, N - 1);` `    ``// If K = 0, then subtraction and``    ``// addition does not make any``    ``// difference``    ``if` `(K > 0)``    ``{``        ` `        ``// If unit's digit greater than K``        ``if` `((num % 10 - K) >= 0)``            ``checkUtil(10 * num +``                      ``num % 10 - K, K, N - 1);``    ``}``}` `// Function to call checkUtil function``// for every integer from 1 to 9``static` `void` `check(``int` `K, ``int` `N)``{``    ` `    ``// Loop to check for``    ``// all digits from 1 to 9``    ``for``(``int` `i = 1; i <= 9; i++)``    ``{``        ``checkUtil(i, K, N);``    ``}``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ` `    ``// Given N and K``    ``int` `N = 4, K = 8;``    ``check(K, N);` `    ``// Count total possible numbers``    ``Console.Write(countNums + ``"\n"``);``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output
`3`

Time Complexity: O(2N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up