给出两个整数a和b, 求他们的和, 但不能使用 +
等数学运算符。
如果 a=1
并且 b=2
,返回3
你不需要从输入流读入数据,只需要根据aplusb
的两个参数a和b,计算他们的和并返回就行。
1 class Solution { 2 /* 3 * param a: The first integer 4 * param b: The second integer 5 * return: The sum of a and b 6 */ 7 public int aplusb(int a, int b) { 8 // write your code here, try to do it without arithmetic operators. 9 if(b==0) { 10 return a; 11 }else{ 12 return aplusb(a^b,(a&b)<<1);//a^b是进行异或运算,再加上(a&b)<<1就实现了进位 13 } 14 } 15 };
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?
给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。
样例
例如,排列[1,2,4]是第1个排列。//这道题其实考察的是字典全排列,当然我的解法并不是正常的思路,常规的算法应该是将这个数字序列的所有字典全排列算出来,去看看所给的是第几个。
http://www.geekviewpoint.com/java/numbers/permutation_index 具体介绍见链接,
1 public class Solution { 2 /** 3 * @param A an integer array 4 * @return a long integer 5 */ 6 public long permutationIndex(int[] A) { 7 // Write your code here 8 /* long index =0; 9 long position = 2; 10 long facrtor=1; 11 for(int q = A.length-2;q >= 0; q --){ 12 long number = 0; 13 for(int p = q+1;p<q;p++) 14 }*/ 15 long index = 0; 16 long position = 2; 17 long factor = 1; 18 for (int p = A.length - 2; p >= 0; p--) { 19 long successors = 0; 20 for (int q = p + 1; q < A.length; q++) { 21 if (A[q] > A[p]) { 22 number++; 23 } 24 } 25 index += (number * factor); 26 factor *= position; 27 position++; 28 } 29 index = index + 1; 30 return index; 31 } 32 }
后续明天继续更新相关的字典排序问题
a-b-problem &&/permutation-index
原文:http://www.cnblogs.com/wangnanabuaa/p/4965958.html