剑指offer67题-No48.求两个数相加
一般都是位运算,记住怎么用位运算求+吧。 可以参考:【每日算法Day 66】经典面试题:不用四则运算如何做加法? - 知乎 1)两个数做^运算,得到各位相加不进位的计算结果 2)两个数做&运算,得到进位。因为进位是要加到左一位的,所以需要左移1 3)循环操作,直到进位为0 int Add(int num1, int num2) { // 最…
|
|
剑指offer67题-No47.求1+2+3+…+n
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 用短路特性求解。 int Sum_Solution(int n) { n && (n = n + Sum_Solution(n-1)); return n; }
|
|
剑指offer67题-No40.数组中只出现一次的数字
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 异或、位运算。 有一个简化版的题目: 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。…
|
|
剑指offer67题-No11.二进制中1的个数
可以用移位运算来写,这样的问题在于,负数,c++中的右移是算数右移,(高位补 1),而不是逻辑右移(高位补 0)。n永远不会变成 0,而是会一直保持 -1。 // 错误的示例 int NumberOf1(int n) { // write code here int cnt = 0; while(n != 0){ if((n & 0x1) …
|
|