// C intsum(int n){ int s = 0; while(n != 0){ int t = n % 10; n /= 10; s += t * t; } return s; } boolisHappy(int n){ int t[810] = {0}; if (n == 1) returntrue; while(n != 1){ n = sum(n); if (t[n] > 1) returnfalse; t[n]++; } returntrue; }
而且第一次拿这么好的成绩,有点小激动
1790. 仅执行一次字符串交换能否使两个字符串相等
解题思路
标记不相同的下标,然后查看两个下标的元素是否可以交换,相差超过3个必然不能进行交换
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// C boolareAlmostEqual(char * s1, char * s2){ int len = strlen(s1); int diff = 0; int flag[2] = {0}; if (s1 == s2) returntrue; for (int i = 0; i < len; i++){ if (s1[i] != s2[i]) { if (diff == 0) flag[0] = i; if (diff == 1) flag[1] = i; diff++; if (diff > 2) returnfalse; } } if (s1[flag[0]] == s2[flag[1]] && s1[flag[1]] == s2[flag[0]]) returntrue; returnfalse; }