* N字型变换:看上去很简单 即将一行字符按N字型摆放,确实 按照下上 再加个flag很容易实现, * 输出按一行一行输出也可以实现 但是这样复杂度变高 * 后来想着在保存的时候记录其位置 一直实现不了 * * 看了大佬才发现真正规律 即相邻同类型列之间两个相同位置,其距离是(2*n)-1 * * String.valueOf(s.charAt(j)) 将字符转换为字符串
class Solution {
public String convert(String s, int n) {
StringBuffer ans=new StringBuffer();
if (n==1){
System.out.println(s);
return s;
}
//String x=String.valueOf(s.charAt(0));
//System.out.println((String.valueOf(s.charAt(0)).getClass()));
//首行每个字符之间间隔 3行时:3+(3-2)
for (int i = 0; i <n ; i++) {
if (i==0||i==n-1){//第一行 和第n行 因为 首位两行之间差距是n+(n-2)
for (int j = i; j <s.length() ; j+=n+(n-2)) {
ans.append(String.valueOf(s.charAt(j)));//字符转字符串
}
}else{//中间行 这里就是纯找规律了k代表斜线上的元素 底行向上和直线上的元素个数是一样的,
//找到每一行的开头两个 然后后面依次加等距离
for (int j = i,k=2*n-2-i; j <s.length()||k<s.length() ; j+=n+(n-2),k+=n+(n-2)) {
if(j<s.length()) ans.append(String.valueOf(s.charAt(j)));
if(k<s.length()) ans.append(String.valueOf(s.charAt(k)));
}
}
}
return ans.toString();
}
}
输入一个字符串s,按N排列 然后从左往右 从上往下输出 ,位置顺序要固定,那么就得找出其位置规律
首位的话 相隔 2*n-2
中间 分:对角线 和 列上面 找到其位置上的规律——列 i 对角线 2*n-2-i 与后面分别相隔 2*n-2