samit.roy
BAN USERpublic int findMinDistanceNumber(int number) throws Exception {
int powOf2 = 1;
if (number <= 0 || number >= Integer.MAX_VALUE - 2) throw new Exception("Invalid number!");
//Find the 0 before/after the first 1 and toggle
while(powOf2 < Integer.MAX_VALUE - 2) {
// If power of 2 bit is set
if ((number & powOf2) > 0) {
// Check right first if that bit can be set to 1
if (powOf2 != 1 && (number & (powOf2 >> 1))==0) {
number = number + (powOf2 >> 1) - powOf2;
break;
}
// Else check left
if ((number & (powOf2 << 1))==0) {
number = number + (powOf2 << 1) - powOf2;
break;
}
}
powOf2 = powOf2 << 1;
}
return number;
}
public static int[] addNumber(int [] inputArr) throws Exception {
boolean carryOver = false;
for (int num = inputArr.length-1; num > -1; num--) {
if (inputArr[num] < 0) throw new Exception("Invalid number");
if (inputArr[num] < 9) {
inputArr[num] = inputArr[num] + 1;
carryOver = false;
break;
} else {
inputArr[num] = 0;
carryOver = true;
}
}
// If all nines
if (carryOver) {
inputArr = new int[inputArr.length+1];
Arrays.fill(inputArr, 0);
inputArr[0] = 1;
}
// Trim output if input had leading zeroes
int k = 0;
for(;k<inputArr.length; k++) {
if (inputArr[k] != 0) break;
}
if (k>0) {
return Arrays.copyOfRange(inputArr, k, inputArr.length);
}
return inputArr;
}
- samit.roy September 02, 2015