Facebook Interview Question
InternsCountry: United States
public class NextInteger {
public static void main(String[] args) {
System.out.print("Next Integer: " + Arrays.toString(nextInteger(new int[]{9, 9, 8})));
}
private static int[] nextInteger(int[] input) {
if (input.length == 0) {
return input;
}
int sum;
int carry = 1;
for (int i = input.length - 1; i >= 0 && carry != 0; i--) {
sum = input[i] + carry;
input[i] = sum > 9 ? sum - 10 : sum;
carry = sum > 9 ? 1 : 0;
}
if (carry == 0) {
return input;
}
int[] result = new int[input.length + 1];
result[0] = carry;
System.arraycopy(input, 0, result, 1, input.length);
return result;
}
}
def helper( digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
next_=[1]
i=0
digits=digits[::-1]
j=0
cur=0
res=[]
while(i<len(next_) or j<len(digits)):
first = next_[i] if i<len(next_) else 0
i+=1
second = digits[j] if j<len(digits) else 0
j+=1
sum_=first+second+cur
res.append(sum_%10)
cur=sum_/10
if cur:
res.append(1)
return res[::-1]
private static int findNextInteger(int[] arr) {
if (arr == null || arr.length == 0)
return 0;
int number = 0;
// 10^2*1+10^1*2+10^0*3 = 100+20+3 = 234
for (int i = arr.length - 1, j = 0; i >= 0 && j <= arr.length - 1; i--, j++) {
number = number + (int) (Math.pow(10, i) * arr[j]);
}
return (number+1);
}
{var interger = [1,9,9]
let c = interger.count-1
var carryforward = 0
for n in 0...c{
var temp = interger[c-n]
temp = temp + 1
if temp == 10{
carryforward = 1
temp = 0
interger[c-n] = temp
}else{
carryforward = 0
interger[c-n] = temp
break
}
}
if carryforward == 1{
interger.insert(1, at: 0)
}
print(interger)
}
var NextInteger = function (arr) {
var carry = 0;
var result = [];
for (var i = arr.length - 1; i >= 0; i--) {
var sum = 0
var addNum = 0;
if (i == arr.length - 1) {
addNum = arr[i] + 1;
} else {
addNum = arr[i];
}
sum = carry + addNum;
if (sum > 9) {
carry = 1; sum = 0;
}
else {
carry = 0;
}
result.unshift(sum);
}
if (carry > 0)
result.unshift(carry);
}
#include <iostream>
#include <vector>
#include <algorithm>
void increment_num(std::vector<int>& v) {
std::reverse(v.begin(), v.end());
v[0] += 1;
if (v[0] == 10) {
v[0] = 0;
int carry = 1;
for (int i=1; i<v.size();++i){
v[i] += carry;
carry = 0;
if (v[i] == 10){
v[i] = 0;
carry = 1;
}
}
if (carry){
v.emplace_back(carry);
}
}
std::reverse(v.begin(), v.end());
}
int main(){
std::vector<int> v{9, 9, 9};
increment_num(v);
for (auto a: v) {
std::cout << a << " ";
}
std::cout << std::endl;
return EXIT_SUCCESS;
}
/*given an array representing a non-negative integer (ex: 123 represented as [1,2,3]), return the next integer (output: [1,2,4])
.run through all edge cases (ex: [9,9,9,9,9,9,9,9] etc)
*/
public class IncreasingArray {
public static void main(String args[])
{
int[] input=new int[]{9,9,9,9,9};
System.out.println("Next is ==>"+Arrays.toString(getNext(input)));
}
public static int[] getNext(int[] inputArr)
{
String inputArrStr = Arrays.toString(inputArr).replaceAll("\\[|\\]|,|\\s","");
int number = Integer.parseInt(inputArrStr);
number = number + 1;
String newNumber = String.valueOf(number);
char[] newNumberArr = newNumber.toCharArray();
int[] result = new int[newNumber.length()];
for(int i=0;i<=newNumber.length()-1;i++)
{
result[i]=Character.getNumericValue(newNumberArr[i]);
}
return result;
}
}
public class IncreasingArray {
public static void main(String args[])
{
int[] input=new int[]{9,9,9,9,9};
System.out.println("Next is ==>"+Arrays.toString(getNext(input)));
}
public static int[] getNext(int[] inputArr)
{
String inputArrStr = Arrays.toString(inputArr).replaceAll("\\[|\\]|,|\\s","");
int number = Integer.parseInt(inputArrStr);
number = number + 1;
String newNumber = String.valueOf(number);
char[] newNumberArr = newNumber.toCharArray();
int[] result = new int[newNumber.length()];
for(int i=0;i<=newNumber.length()-1;i++)
{
result[i]=Character.getNumericValue(newNumberArr[i]);
}
return result;
}
}
public static int[] GetNextArray(int[] input)
{
var value = string.Join(string.Empty, input.Select(p => p.ToString()).ToArray());
var str = (int.Parse(value) + 1).ToString();
var output = new int[str.Length];
for (var index = 0; index < str.Length; index++)
{
output[index] = int.Parse(str[index].ToString());
}
return output;
}
def cheat( some_arr ){
some_num = 1 + fold( some_arr, 0 ) as { $.p*10 + $.o }
ret_arr = list()
while ( some_num != 0 ){
ret_arr.add( 0 , some_num % 10 )
some_num /= 10
}
ret_arr
}
def non_cheat( some_arr ){
resp = rfold ( some_arr, { 'carry' : 1, 'result' : list() } ) as {
r = ( $.o + $.p.carry )
$.p.carry = r / 10
$.p.result.add ( 0, r % 10 )
$.p // return
}
resp.result // return
}
println( non_cheat( [1,4,3 ] ) )
ans = []
def next_int(arr, x):
if x == len(t)-1:
ss = t[x]+1
if ss > 9:
ans.append(ss%10)
return ss/10
else:
ans.append(ss)
return 0
child_sum = next_int(arr, x+1)
s = arr[x] + child_sum
if s > 9:
ans.insert(0,int(s%10))
s = s / 10
else:
ans.insert(0,int(s))
s = 0
return s
# t = [1,2]
# t = [1,2,3]
t = [9,9,9,9,9,9,9,9,9,9]
ans.insert(0, int(next_int(t, 0)))
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
cout<<"Input=";
vector <int> vec={1,9,9};
for (int j=0; j<vec.size();j++){
cout<<vec[j]<<" ";
}
reverse(vec.begin(),vec.end());
int carry=0, carry_new=0;
cout<<endl;
for (int i=0; i<vec.size(); i++){
if (i==0){
carry=(vec[0]+1)/10;
cout<<"carryjjjj= "<<carry<<"--------"<<endl;
vec[0]=(vec[0]+1)%10;
}
else{
cout<<"i= "<<i<<" carry= "<<carry<<endl;
carry_new=(vec[i]+carry)/10;
vec[i]=(vec[i]+carry)%10;
carry=carry_new;
}
}
if (carry==1)
vec.push_back(carry);
reverse(vec.begin(),vec.end());
cout<<"output= ";
for (int j=0; j<vec.size();j++){
cout<<vec[j]<<" ";
}
cout<<endl;
return 0;
}
import java.util.*;
public class HelloWorld{
public static void main(String []args){
int[] ar = getArray(new int[]{9,9,5,9,9,8}, 5);
for(int y: ar){
System.out.println(y);
}
}
private static int[] getArray(int[] ar, int ind){
if(ind < 0) {
int[] arr = new int[ar.length+1];
arr[0] = 1;
for(int i=0; i< ar.length; i++){
arr[i+1] = 0;
}
return arr;
}
ar[ind] += 1;
if(ar[ind] > 9){
ar[ind] = 0;
return getArray(ar, ind-1);
} else
return ar;
}
}
I will give two solutions:
One using O(n) extra space:
std::vector<int> next_int(std::vector<int> myvector) {
std::vector<int> result;
std::vector<int>::reverse_iterator rit = myvector.rbegin();
int sum = 0, acc = 1;
for (; rit!= myvector.rend(); ++rit) {
sum = *rit + acc;
if (sum == 10) {
result.push_back(0);
acc = 1;
} else {
result.push_back(sum);
acc = 0;
++rit;
break;
}
}
if (rit!= myvector.rend())
for (; rit!= myvector.rend(); ++rit) {
result.push_back(*rit);
} else {
if (acc)
result.push_back(acc);
}
std::reverse(result.begin(), result.end());
return result;
}
The next one, no extra space used:
void next_int(std::vector<int> &myvector) {
std::vector<int> result;
std::vector<int>::reverse_iterator rit = myvector.rbegin();
int sum = 0, acc = 1;
for (; rit!= myvector.rend(); ++rit) {
sum = *rit + acc;
if (sum == 10) {
*rit = 0;
acc = 1;
} else {
*rit = sum;
acc = 0;
++rit;
break;
}
}
if (rit== myvector.rend() && acc) {
auto it = myvector.begin();
myvector.insert ( it , acc );
}
}
```
- mehdi January 18, 2019def helper(digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
next_=[1]
i=0
digits=digits[::-1]
j=0
cur=0
res=[]
while(i<len(next_) or j<len(digits)):
first = next_[i] if i<len(next_) else 0
i+=1
second = digits[j] if j<len(digits) else 0
j+=1
sum_=first+second+cur
res.append(sum_%10)
cur=sum_/10
if cur:
res.append(1)
return res[::-1]
```