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 == 0
,128 % 2 == 0
,128 % 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;
}