孩子们的游戏(圆圈中最后剩下的数)
随机指定一个数m,从编号0开始报数。每次喊到m-1的那个数要出列;从他的下一个数开始,继续0…m-1报数….这样下去….直到剩下最后一个数,返回这个数。
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n<1||m<1) return -1;
int[] array = new int[n];
int i = -1,step = 0, count = n;
while(count>0){ //跳出循环时将最后一个元素也设置为了-1
i++; //指向上一个被删除对象的下一个元素。
if(i>=n) i=0; //模拟环。
if(array[i] == -1) continue; //跳过被删除的对象。
step++; //记录已走过的。
if(step==m) { //找到待删除的对象。
array[i]=-1;
step = 0;
count--;
}
}
return i;//返回跳出循环时的i,即最后一个被设置为-1的元素
}
}
求1+2+3+…+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
public class Solution {
public int Sum_Solution(int n) {
int sum = (int) (Math.pow(n,2) + n);
return sum>>1;
}
}
不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
import java.math.BigInteger;
public class Solution {
public int Add(int num1,int num2) {
BigInteger bi1=new BigInteger(String.valueOf(num1));
BigInteger bi2=new BigInteger(String.valueOf(num2));
return bi1.add(bi2).intValue();
}
}