1. 程式人生 > >leetcode筆記(832,728,344題)

leetcode筆記(832,728,344題)

832. 反轉影象

題目:

給定一個二進位制矩陣 A,我們想先水平翻轉影象,然後反轉影象並返回結果。

水平翻轉圖片就是將圖片的每一行都進行翻轉,即逆序。例如,水平翻轉 [1, 1, 0] 的結果是 [0, 1, 1]

反轉圖片的意思是圖片中的 0 全部被 1 替換, 1 全部被 0 替換。例如,反轉 [0, 1, 1] 的結果是 [1, 0, 0]

思路:一行元素從倒序遍歷放入容器vec2(vector<int>型別)中,把v放入vec1(vector<vector<int>>型別)中清空容器v繼續遍歷下一行執行同樣操作。反轉整個矩陣後,遍歷容器vec1,元素為0則置1,為1則置0;

程式:

vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
        vector<vector<int>> ret;
        vector<int> v;
        for(auto i=0;i!=A.size();++i)
        {
            for(int j=A[i].size()-1;j>=0;--j)
            {
                    v.push_back(A[i][j]);
            }     
        ret.push_back(v);      //容器壓入容器的容器中
            v.clear();    //清空容器
        }    
       for(auto i=0;i!=ret.size();++i)     //遍歷容器,元素為0則置1,為1則置0
             for(auto j=0;j!=ret[i].size();++j)
            {
                if(ret[i][j]==0)
                    ret[i][j]=1;
                else
                    ret[i][j]=0;                     
            }               
return ret;

    }

728.自除數

題目:

自除數 是指可以被它包含的每一位數除盡的數。

例如,128 是一個自除數,因為 128 % 1 == 0128 % 2 == 0128 % 8 == 0

還有,自除數不允許包含 0 。

給定上邊界和下邊界數字,輸出一個列表,列表的元素是邊界(含邊界)內所有的自除數。

思路:取餘算出每一位數,如果含0則直接判斷不是自除數,否則判斷各個位上的數是否能這個數被整除。

程式:vector<int> selfDividingNumbers(int left, int right) {
vector<int> vec1;
for (int i = left; i<=right; ++i)
{
int digi = i;
int a = 0;
while (digi != 0)
{
a = digi % 10;
if(a==0)
    break;
            else
                if(i%a==0)
                    ;
            else
                break;
digi = digi/10;
}
if (digi == 0)
vec1.push_back(i);
}
return vec1;

}

344.反轉字串

題目:請編寫一個函式,其功能是將輸入的字串反轉過來。

思路:很簡單,把字串下標從size()-1到0的字元依次放入新建的字串中。

程式:  string reverseString(string s) {
        string ret;
        for(int i=s.size()-1;i>=0;--i)     //注意是int型別,因為執行到for迴圈最後一次,i會遞減為-1
            ret.push_back(s[i]);
    return ret;    
    }