剛拿到這題時感覺很簡單,結果最後被負數值求解給困擾了
方法1:
讓乙個數減去1,如果末尾是1的話,只有最後一位會變,相與,會讓這個數減少乙個1位,達到效果;如果末尾是0的話,從最右邊的1位開始到末尾,全部取反,也會減少乙個1位,所以也能達到效果。這種方法的好處就是能減少運算的次數。
方法2:
使用左移,因為右移會比較麻煩(不適合負數);
#includeusing namespace std;
//方法一
int method1(int m)
return s;
}//方法二
int method2(int m)
return s;
}int main()
return 0;
}
參考部落格: 劍指offer第二題
最直觀的做法是從頭往後開始掃瞄,但是這樣複雜度為o n 2 o n 的做法是從後往前開始複製和替換。先求出替換後的字串大小,然後用兩個指標 index 從後往前複製,如果遇上空格,直接替換為 20 public class solution int oldindex str.length 1 int...
劍指offer第二題
請實現乙個函式,將乙個字串中的空格替換成 20 例如,當字串為 則經過替換之後的字串為 分析 考場陣列的操作,主要是從頭到尾的操作要消耗o n 複雜度,如果完成插值,則為o n2 所以要從尾部倒過來轉移。注意 本題有兩點要考慮。其一,注意錯誤的返回值為return,而不是return false。其...
劍指offer 簡單題 一
因為這幾題太簡單了,總結一下思路就行了。知識點 陣列 其實就是for迴圈加個判斷條件。牛客上有人呼叫了一些大數之類的api,感覺沒啥必要。為了ac可以,面試的時候這樣是真的秀逗了。給定乙個陣列a 0,1,n 1 請構建乙個陣列b 0,1,n 1 其中b中的元素b i a 0 a 1 a i 1 a ...