这是我试图求解leetcode 第六题,这不重要,主要看一下程序里面那个if语句的执行
问题,不用看我针对这道题的逻辑对不对,这不是重点,重点是那个if语句!!!
在代码那个(***)的地方我给了注释!!!
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string s;
int numRows;
cin >> s >> numRows;
char *ss = new char[s.size()];
int k = 2 * numRows - 2;//每个单元元素的个数
int m = s.size() / k;//一共有多少个单元
int flag = s.size() % k;
if(flag != 0)
m++;
int n = 2 * m;
//先对第一行单独处理
for(int i = 0, j = 0; j < m; ++j, i = i + k)
{
ss[j] = s[i];
}
//对第二行至倒数第二行的处理
//i =(所在行 - 1)
//j =(所在列 - 1)
int count = 0;
int i = 1, j = 0;
int x;
cout << endl;
while(i < numRows - 1)
{
while(count < n)
{
//偶数列时要加上行数,奇数列时要减去行数
if(j % 2 == 1)
x = 1;
else
x = -1;
int num = (j / 2 + j % 2);//0 1 2 3 4 5 6 -> 0 1 1 2 2 3 3
cout << "k:" << k << '\n' << "num:" << num << '\n';
cout << "i:" << i << '\n' << "x:" << x << '\n';
cout << "s.size():" << s.size() << endl;
//这里输入PAYPALISHIRING 3 之后 k=4,num=0,i=1,x=-1,s.size()=14明显if语句执行不了,
//但是居然执行了,我好郁闷啊!!!求解!!!
(***) if((k*num+i*x) >= s.size())
{
cout << "DDDDDDDDD" << endl;
break;
}
//m代表第一行元素的个数
cout << "CCCCCCCCCC" << endl;
ss[m+n*(i-1)+j] = s[k*num+i*x];
cout << s[k*num+i*x];
j++;
count++;
}
i++;
}
//对最后一行进行处理
i--;
j--;
for(int jj = m+n*(i-1)+j, ii = numRows-1; ii < s.size() && jj < s.size(); ++jj, ii = ii + k)
{
ss[jj] = s[ii];
}
cout << ss << endl;
return 0;
}