Sum of all subsequences of a number
Last Updated :
13 Apr, 2023
Given a number as string s, find the sum of all the elements present in all possible subsequences of s.
Examples :
Input : s = "123"
Output : 24
Explanation : all possible sub-sequences are
1, 2, 3, {1, 2}, {2, 3}, {1, 3}, {1, 2, 3}
which add up to 24
Input : s = "453"
Output : 48
Brute Force Approach:
Calculate the sum of all possible subsequences of a given string ‘s’. It does so by generating all possible subsequences of the given string and then computing the sum of each subsequence.
Algorithm:
- Declare an integer variable ‘n’ to store the length of the input string ‘s’ using the size() function.
- Declare an integer variable ‘ans’ to store the sum of all possible subsequences.
- Generate all possible subsequences of the input string ‘s’ using a nested loop.
- The outer loop generates all possible binary numbers with ‘n’ bits (from 0 to 2^n – 1).
- The inner loop checks each bit of the binary number and includes the corresponding character of the input string ‘s’ in the subsequence if the bit is set to 1.
- Compute the sum of the generated subsequence and add it to the variable ‘ans’.
- Print the variable ‘ans’ as the output of the program.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = "453" ;
int n = s.size();
int ans = 0;
for ( int i = 0; i < (1 << n);
i++) {
int sum = 0;
for ( int j = 0; j < n;
j++) {
if (i
& (1
<< j)) {
sum += (s[j]
- '0' );
}
}
ans += sum;
}
cout << ans << endl;
return 0;
}
|
Java
import java.util.*;
class Main {
public static void main(String[] args)
{
String s = "453" ;
int n = s.length();
int ans = 0 ;
for ( int i = 0 ; i < ( 1 << n); i++) {
int sum = 0 ;
for ( int j = 0 ; j < n; j++) {
if ((i & ( 1 << j)) != 0 ) {
sum += (s.charAt(j) - '0' );
}
}
ans += sum;
}
System.out.println(ans);
}
}
|
Python3
def generateSubsequences(s):
n = len (s)
ans = 0
for i in range ( 1 << n):
sum = 0
for j in range (n):
if i & ( 1 << j):
sum + = int (s[j])
ans + = sum
return ans
s = "453"
print (generateSubsequences(s))
|
Javascript
let s = "453" ;
let n = s.length;
let ans = 0;
for (let i = 0; i < (1 << n); i++) {
let sum = 0;
for (let j = 0; j < n; j++) {
if (i & (1 << j)) {
sum += parseInt(s[j]);
}
}
ans += sum;
}
console.log(ans);
|
C#
using System;
class Program {
static void Main( string [] args)
{
string s = "453" ;
int n = s.Length;
int ans = 0;
for ( int i = 0; i < (1 << n);
i++) {
int sum = 0;
for ( int j = 0; j < n;
j++) {
if ((i & (1 << j))
!= 0) {
sum += (s[j]
- '0' );
}
}
ans += sum;
}
Console.WriteLine(ans);
}
}
|
Time Complexity: O(2^n * n)
Auxiliary Space: O(1)
Power Set Approach: Using power set, we can find all the subsequences and sum up all the subsequences individually in a different function. The total number of subsequences possible is 2n-1. Add the sum of all subsequences to the combined sum which is the final output.
Algorithm:
- Create a function named “findSubSequence” with an int return type that takes two parameters, a string “s” and an integer “num”. This function will return the numeric value of a subsequence of s.
- Create a variable named “res” and initialize it with 0 and another variable “i” of int type and initialize it with again 0.
- Run a while loop till “num” > 0
- check if the i-th bit is set (i.e., it is equal to 1). If yes, add the numeric value of the i-th character of s (obtained by subtracting the character ‘0’) to res.
- then increment i by 1 and right shift num by 1.
- return the value of res.
- Create a function with an int return type named “combinedSum” which takes string “s” as the input parameter.
- Create an int variable “n” and initialize it with the length of the string.
- Create another int variable “c_sum” and initialize it with 0.
- Calculate the number of subsequences of s as range = (1 << n) – 1
- start a for loop and iterate it through all the subsequences by iterating from 0 to range.
- In each iteration, call the function findSubSequence with the string s and the current subsequence number i. Add the returned value to c_sum
- return c_sum.
Below is the implementation of above approach.
C++
#include <bits/stdc++.h>
using namespace std;
int findSubSequence(string s, int num)
{
int res = 0;
int i = 0;
while (num) {
if (num & 1)
res += s[i] - '0' ;
i++;
num = num >> 1;
}
return res;
}
int combinedSum(string s)
{
int n = s.length();
int c_sum = 0;
int range = (1 << n) - 1;
for ( int i = 0; i <= range; i++)
c_sum += findSubSequence(s, i);
return c_sum;
}
int main()
{
string s = "123" ;
cout << combinedSum(s);
return 0;
}
|
Java
import java.io.*;
class GFG {
static int findSubSequence(String s,
int num)
{
int res = 0 ;
int i = 0 ;
while (num > 0 ) {
if ((num & 1 ) == 1 )
res += s.charAt(i) - '0' ;
i++;
num = num >> 1 ;
}
return res;
}
static int combinedSum(String s)
{
int n = s.length();
int c_sum = 0 ;
int range = ( 1 << n) - 1 ;
for ( int i = 0 ; i <= range; i++)
c_sum += findSubSequence(s, i);
return c_sum;
}
public static void main (String[] args) {
String s = "123" ;
System.out.println(combinedSum(s));
}
}
|
Python 3
def findSubSequence(s, num):
res = 0
i = 0
while (num) :
if (num & 1 ):
res + = ord (s[i]) - ord ( '0' )
i + = 1
num = num >> 1
return res
def combinedSum(s):
n = len (s)
c_sum = 0
ran = ( 1 << n) - 1
for i in range ( ran + 1 ):
c_sum + = findSubSequence(s, i)
return c_sum
if __name__ = = "__main__" :
s = "123"
print (combinedSum(s))
|
C#
using System;
class GFG {
static int findSubSequence( string s,
int num)
{
int res = 0;
int i = 0;
while (num > 0) {
if ((num & 1) == 1)
res += s[i] - '0' ;
i++;
num = num >> 1;
}
return res;
}
static int combinedSum( string s)
{
int n = s.Length;
int c_sum = 0;
int range = (1 << n) - 1;
for ( int i = 0; i <= range; i++)
c_sum += findSubSequence(s, i);
return c_sum;
}
public static void Main()
{
string s = "123" ;
Console.Write(combinedSum(s));
}
}
|
PHP
<?php
function findSubSequence( $s , $num )
{
$res = 0;
$i = 0;
while ( $num ) {
if ( $num & 1)
$res += $s [ $i ] - '0' ;
$i ++;
$num = $num >> 1;
}
return $res ;
}
function combinedSum(string $s )
{
$n = strlen ( $s );
$c_sum = 0;
$range = (1 << $n ) - 1;
for ( $i = 0; $i <= $range ; $i ++)
$c_sum += findSubSequence( $s , $i );
return $c_sum ;
}
$s = "123" ;
echo combinedSum( $s );
?>
|
Javascript
<script>
function findSubSequence(s,num)
{
let res = 0;
let i = 0;
while (num > 0) {
if ((num & 1) == 1)
res += s[i].charCodeAt(0) - '0' .charCodeAt(0);
i++;
num = num >> 1;
}
return res;
}
function combinedSum(s)
{
let n = s.length;
let c_sum = 0;
let range = (1 << n) - 1;
for (let i = 0; i <= range; i++)
c_sum += findSubSequence(s, i);
return c_sum;
}
let s = "123" ;
document.write(combinedSum(s));
</script>
|
Time complexity :O(2^n * n)
Auxiliary Space:O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...