分析:
- 题目有三个关键点:
- 一:结束时,回到起始位置(比较结束时和起始时的下标位置是否相同)
- 二:该整数的所有数字都必须遍历一遍,且只能遍历一遍(把遍历过的数字做个标记)
- 三:要走的步数超出整数的长度时,应该选择取余绕回整数的最左,而不是作减法,因为作减法后可能仍然超出整数长度
package no1_1;
import java.util.*;
import java.io.*;
public class Main {public static void main(String[] args) throws NumberFormatException, IOException {BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));String s=reader.readLine();int len=s.length();int[] n=new int[len];for(int i=0;i<len;i++) {n[i]=(int)s.charAt(i)-48;//0的ASCII码为48}int index=0;int times=len;String result="yes";while(times-->0) {int temp=n[index];n[index]=0;//遍历过的数字都标记为0if(index+temp>=len) {//当前下标加上行走的步数超出了数组长度,绕回数组最左边index=(index+temp)%len;}else {index=index+temp;}}//两重检查 if(index!=0) {//没有回到开头的位置result="no";}else {//某个数字没有遍历到for(int i=len-1;i>=0;i--) {if(n[i]!=0) {result="no";break;}}}System.out.println(result);}
}