7. Reverse Integer

7. Reverse Integer
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321

這題的思路很簡單,就是現將整數x的每一位數提取出來,之後倒序乘上10的對應次方然後相加,再判斷是否越界就行。無論正負對計算結果沒有影響。
參考代碼如下:

class Solution {
public:
    int reverse(int x) {
        long long result = 0;
        int length = 0;
        int num[15];
        while(x != 0) {
            num[length++] = x % 10;
            x /= 10;
        }
        for (int i = 0; i < length; i++) {
            result += num[i] * pow(10, length - 1 - i);
            if(result > INT_MAX || result < INT_MIN) {
                result = 0;
                break;
            }
        }
        return (int)result;
    }
};

再來看另外一道題

75、 Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library’s sort function for this problem

這題的主要思路就是利用交換把值爲0的object放到最左,把爲值爲2的object放到最右,剩下的中間的就是值爲1的object了。
使用變量i記錄值爲0的objects的邊界,也就是i往左的所有objects的顏色值都爲0,用變量j記錄值爲1的objects的邊界,也就是j往右的所有objects的顏色值都爲1,最後變量now是當前檢測的object的位置,從頭開始直到遇到j,遇到顏色值爲0的object與nums[i]交換,遇到顏色值爲1的object與nums[j]交換,使得檢查過的所有object裏,值爲0的全部交換至左端,值爲2的全部交換至左端,而遇到1不交換使得now往左,到i之前的值都爲1,所以若now指代的當前值值爲0時,交換後now指代的值由0轉爲1,無需判斷,故可以直接判斷下一個值,而若now指代的當前值值爲2,和j指代的object交換,而j指代的object的顏色值爲未知數,所以這時now便不能移向下一個位置,需要繼續判斷交換後的當前位置。當循環結束時便能得到排好序的vector了,而時間複雜度爲O(n)
參考代碼如下:

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int temp;
        int i = 0, j = nums.size() - 1;
        int now = i;
        while(now <= j) {
            if(nums[now] == 0) {
                temp = nums[now];
                nums[now] = nums[i];
                nums[i] = temp;
                i++;
                now++;
            }
            else if(nums[now] == 2) {
                temp = nums[now];
                nums[now] = nums[j];
                nums[j] = temp;
                j--;
            }
            else {
                now++;
            }
        }
    }
};
發佈了30 篇原創文章 · 獲贊 1 · 訪問量 3808
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章